Skip to content

Configuration ko KR

ArchiBot edited this page Aug 8, 2026 · 131 revisions

ํ™˜๊ฒฝ์„ค์ •

์ด ํŽ˜์ด์ง€๋Š” ASF ํ™˜๊ฒฝ์„ค์ •์— ๋Œ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ด๋Š” config ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์„ค๋ช…์ด๋ฉฐ, ASF๋ฅผ ๋‹น์‹ ์˜ ์ž…๋ง›์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


์†Œ๊ฐœ

ASF ํ™˜๊ฒฝ์„ค์ •์€ ๋‘๊ฐœ์˜ ์ฃผ์š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค. ์ผ๋ฐ˜(ํ”„๋กœ์„ธ์Šค) ํ™˜๊ฒฝ์„ค์ •๊ณผ ๋ชจ๋“  ๋ด‡์˜ ํ™˜๊ฒฝ์„ค์ •์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ด‡์€ ๊ฐ๊ฐ ๋ด‡์ด๋ฆ„.json์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ด‡ ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋ด‡์ด๋ฆ„์€ ๋ด‡์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ASF ์ผ๋ฐ˜(ํ”„๋กœ์„ธ์Šค) ์„ค์ •์€ ASF.json์ด๋ผ๋Š” ๋‹จ์ผ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

๋ด‡์€ ASF ํ”„๋กœ์„ธ์Šค์— ์ฐธ์—ฌํ•˜๋Š” ๋‹จ์ผ ์ŠคํŒ€ ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ASF๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ •์˜๋œ ๋ด‡ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œํ•˜๋Š” ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜์ œํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋งŒํผ ๋ด‡(์ŠคํŒ€ ๊ณ„์ •)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ASF๋Š” ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•˜์—ฌ JSON ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์—๊ฒŒ ์นœ์ˆ™ํ•˜๊ณ , ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ASF๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด JSON์„ ์•Œ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ bash ์Šคํฌ๋ฆฝํŠธ๋กœ ASF ํ™˜๊ฒฝ์„ค์ •์„ ๋Œ€๋Ÿ‰์ƒ์„ฑํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ์–ธ๊ธ‰ํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

์„ค์ •์€ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ์˜ **Web ๊ธฐ๋ฐ˜ ConfigGenerator**๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ASF์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋กœ์ปฌ ์•ฑ์ž…๋‹ˆ๋‹ค. ASF ๋‚ด์—์„œ ์ง์ ‘ ์„ค์ •์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ €ํฌ์˜ ASF-ui IPC ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์•„๋ž˜์— ๋ช…์‹œ๋œ ๊ณ ์ •๋œ JSON ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๊ธฐ๋งŒ ํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ์„ค์ • ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜๋“ค์€ ๊ณง์ด์–ด ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


์›น ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ • ์ƒ์„ฑ๊ธฐ(ConfigGenerator)

์ €ํฌ **Web ๊ธฐ๋ฐ˜ ConfigGenerator**์˜ ๋ชฉ์ ์€ ASF ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›น ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ • ์ƒ์„ฑ๊ธฐ๋Š” 100% ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์ž…๋ ฅํ•œ ์„ธ๋ถ€๋‚ด์šฉ์€ ๋‹ค๋ฅธ ์–ด๋””๋กœ๋„ ๋ณด๋‚ด์ง€์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ณด์•ˆ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ  index.html ํŒŒ์ผ์„ ๋‹น์‹ ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์˜คํ”„๋ผ์ธ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ • ์ƒ์„ฑ๊ธฐ๋Š” ํฌ๋กฌ๊ณผ ํŒŒ์ด์–ดํญ์Šค์—์„œ ์ •์ƒ์ž‘๋™๋จ์„ ๊ฒ€์ฆํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์œ ๋ช…ํ•œ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํƒญ์„ ์„ ํƒํ•ด์„œ ์ƒ์„ฑ์„ ์›ํ•˜๋Š” ASF ๋˜๋Š” ๋ด‡ ํ™˜๊ฒฝ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ASF ๋ฒ„์ „๊ณผ ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์˜ ๋ฒ„์ „์ด ๋งž๋Š”์ง€ ๋‹ค์‹œํ•œ๋ฒˆ ํ™•์ธ ํ›„, ๋ชจ๋“  ์„ธ๋ถ€๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  "๋‹ค์šด๋กœ๋“œ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ASF์˜ config ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ธฐ์กด์˜ ํŒŒ์ผ์— ๋ฎ์–ด์“ฐ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค. ๋งค ์ตœ์ข…์ˆ˜์ •๋งˆ๋‹ค ์ด๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์„ค์ •์—์„œ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด ์„น์…˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.


ASF-ui ์„ค์ •

์ €ํฌ์˜ ASF-ui IPC ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋„ ASF๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดˆ๊ธฐ ์„ค์ •์„ ์ƒ์„ฑํ•œ ์ดํ›„ ASF๋ฅผ ๋‹ค์‹œ ์„ค์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๋” ์šฐ์ˆ˜ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Web ๊ธฐ๋ฐ˜ ConfigGenerator๊ฐ€ ์„ค์ •์„ ์ •์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ์ด ๋ฐฉ์‹์€ ์„ค์ •์„ ๊ทธ ์ž๋ฆฌ์—์„œ(in-place) ๋ฐ”๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ASF-ui๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ €ํฌ IPC ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IPC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ง์ ‘ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ ํ›„, ASF์˜ **IPC ์ฃผ์†Œ**๋กœ ์ด๋™ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค๋ฉด, ๊ทธ๊ณณ์—์„œ ASF ์„ค์ •๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ˆ˜๋™ ํ™˜๊ฒฝ์„ค์ •

์ผ๋ฐ˜์ ์œผ๋กœ ์ €ํฌ ConfigGenerator๋‚˜ ASF-ui ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ธธ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด ํ›จ์”ฌ ์‰ฝ๊ณ  JSON ๊ตฌ์กฐ์—์„œ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ด๋ฅผ ์›ํ•˜์ง€ ์•Š์œผ์‹ ๋‹ค๋ฉด, ์ง์ ‘ ์ˆ˜๋™์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์„ค์ •์„ ์ž‘์„ฑํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์กฐ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์•„๋ž˜์˜ JSON ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ํ•ด๋‹น ๋‚ด์šฉ์„ ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜์—ฌ ์„ค์ •์˜ ๊ธฐ๋ณธ ํ‹€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ์‹œ๋Š” ๊ฒฝ์šฐ, ์„ค์ • ํŒŒ์ผ์ด ์œ ํšจํ•œ์ง€(valid) ํ™•์ธํ•˜์„ธ์š”. ASF๋Š” ํŒŒ์‹ฑํ•  ์ˆ˜ ์—†๋Š” ํŒŒ์ผ์€ ๋กœ๋“œ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ JSON์ด๋ผ ํ•˜๋”๋ผ๋„, ASF๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋Œ€๋กœ ๋ชจ๋“  ์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋„ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์˜ ์˜ฌ๋ฐ”๋ฅธ JSON ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋Š”, JSON ๋งคํ•‘ ์„น์…˜๊ณผ ์•„๋ž˜์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ •

์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ •์€ ASF.json ํŒŒ์ผ์— ๋“ค์–ด์žˆ์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

{
    "AutoRestart": true,
    "Blacklist": [],
    "CommandPrefix": "!",
    "ConfirmationsLimiterDelay": 10,
    "ConnectionTimeout": 90,
    "CurrentCulture": null,
    "Debug": false,
    "DefaultBot": null,
    "FarmingDelay": 15,
    "FilterBadBots": true,
    "GiftsLimiterDelay": 1,
    "Headless": false,
    "IdleFarmingPeriod": 8,
    "InventoryLimiterDelay": 4,
    "IPC": true,
    "IPCPassword": null,
    "IPCPasswordFormat": 0,
    "LicenseID": null,
    "LoginLimiterDelay": 10,
    "MaxFarmingTime": 10,
    "MaxTradeHoldDuration": 15,
    "MinFarmingDelayAfterBlock": 60,
    "OptimizationMode": 0,
    "PluginsUpdateList": [],
    "PluginsUpdateMode": 0,
    "ShutdownIfPossible": false,
    "SteamMessagePrefix": "/me ",
    "SteamOwnerID": 0,
    "SteamProtocols": 7,
    "UpdateChannel": 1,
    "UpdatePeriod": 24,
    "WebLimiterDelay": 300,
    "WebProxy": null,
    "WebProxyPassword": null,
    "WebProxyUsername": null
}

๋ชจ๋“  ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

AutoRestart

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ•„์š”ํ• ๋•Œ ASF๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ• ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. UpdatePeriod ํ˜น์€ update ๋ช…๋ น์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ASF์—…๋ฐ์ดํŠธ๋‚˜, ASF.json ํ™˜๊ฒฝ์„ค์ • ๋ณ€๊ฒฝ, restart ๋ช…๋ น ๋“ฑ ASF๊ฐ€ ์žฌ์‹œ์ž‘์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋ช‡๊ฐ€์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์žฌ์‹œ์ž‘์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์ด ์†์„ฑ์„ ๊ธฐ๋ณธ๊ฐ’์ธ true๋กœ ์œ ์ง€ํ•˜์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง์ ‘ ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๋‚˜ dotnet์„ ํ†ตํ•ด ASF๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด, ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘์„ ์™„์ „ํžˆ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  ์‹ถ์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ๋กœ (์žฌ์‹œ์ž‘๋œ) ASF ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์˜ foreground๊ฐ€ ์•„๋‹Œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์–ด๋”˜๊ฐ€์—์„œ ์กฐ์šฉํžˆ ์‹คํ–‰ ์ค‘์ด๊ณ , ๊ธฐ์กด ASF ํ”„๋กœ์„ธ์Šค์™€ ํ•จ๊ป˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ์ž…๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์ด์ƒ ์ง๊ณ„ ์ฐจ์ผ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์ด ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ์ฝ˜์†” ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์ด ์†์„ฑ๊ฐ’์„ false๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹  ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์—…๋ฐ์ดํŠธ ํ›„ ๋“ฑ ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚ณ๋Š” ๋Œ€์‹  ์ข…๋ฃŒ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ๊ฝค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ถ”๊ฐ€ํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋‹น์‹ ์ด ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ž‘๋™์„ ๋ฉˆ์ถœ๊ฒƒ์ž…๋‹ˆ๋‹ค. ASF๋Š” ํ•ญ์ƒ ์„ฑ๊ณต(0) ๋˜๋Š” ์„ฑ๊ณต์•„๋‹˜(0์ด์™ธ์˜ ๊ฐ’) ๋“ฑ์˜ ์ ์ ˆํ•œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ASF๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ ์ ˆํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์ ์–ด๋„ ํ–ฅํ›„์˜ ๋ถ„์„์„ ์œ„ํ•œ log.txt์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. restart ๋ช…๋ น์€ ์ด ์†์„ฑ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ASF๋ฅผ ์žฌ์‹œ์ž‘ํ•จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ด ์†์„ฑ๊ฐ’์€ ๊ธฐ๋ณธ ํ–‰๋™์„ ์ •์˜ํ•˜์ง€๋งŒ restart ๋ช…๋ น์€ ํ•ญ์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


Blacklist

ImmutableHashSet<uint> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ, ์ด ์ „์—ญ(global) ์„ค์ • ์†์„ฑ์€ ASF์˜ ์ž๋™ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค์—์„œ ์™„์ „ํžˆ ๋ฌด์‹œํ•  appID(๊ฒŒ์ž„)๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ Steam์€ ์—ฌ๋ฆ„/๊ฒจ์šธ ํ• ์ธ ๋ฐฐ์ง€๋ฅผ "์นด๋“œ ํš๋“ ๊ฐ€๋Šฅ"์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF ํ”„๋กœ์„ธ์Šค๋ฅผ ํ˜ผ๋ž€์‹œ์ผœ์„œ ์—ฌ๋ฆ„/๊ฒจ์šธ ํ• ์ธ ๋ฐฐ์ง€๋„ ๋†์‚ฌ์ง€์–ด์•ผ ํ•  ์œ ํšจํ•œ ๊ฒŒ์ž„์œผ๋กœ ๋ฏฟ๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋„ ์—†๋‹ค๋ฉด ASF๋Š” ์‹ค์ œ๋กœ๋Š” ๊ฒŒ์ž„์ด ์•„๋‹Œ ๊ฒŒ์ž„์„ ๋†์‚ฌ์ง“๋А๋ผ๊ณ  ๊ฒฐ๊ตญ ๋งค๋‹ฌ๋ ค์žˆ์„ ๊ฒƒ์ด๊ณ , ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์นด๋“œ ํš๋“์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ASF์˜ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฐ์ง€๋ฅผ ๋†์‚ฌ์šฉ์ด ์•„๋‹˜์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ์–ด๋–ค ๊ฒƒ์„ ๋†์‚ฌ์ง€์„์ง€ ๊ฒฐ์ •ํ• ๋•Œ ์ด๋“ค์„ ์กฐ์šฉํžˆ ๋ฌด์‹œํ•˜๊ณ  ํ•จ์ •์— ๋น ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋Š” ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.

ASF๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค โ€“ ASF ์ฝ”๋“œ์— ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์–ด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•œ SalesBlacklist, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์ •์˜๋˜๋Š” ์ผ๋ฐ˜ Blacklist์ž…๋‹ˆ๋‹ค. SalesBlacklist๋Š” ASF ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค ์‹œ์  ๊ธฐ์ค€์˜ ๋ชจ๋“  "๋ฌธ์ œ ์žˆ๋Š”(bad)" appID๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์‹  ASF๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์—ฌ๊ธฐ์„œ ์ •์˜ํ•˜๋Š” Blacklist๋ฅผ ๋ณ„๋„๋กœ ์ง์ ‘ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์˜ ์ฃผ ๋ชฉ์ ์€ ASF ๋ฆด๋ฆฌ์Šค ์‹œ์ ์— ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ๋†์‚ฌ์ง“์ง€ ๋ง์•„์•ผ ํ•  appID๋ฅผ ๋‹น์‹ ์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ์ฝ”๋”ฉ๋œ SalesBlacklist๋Š” ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ์ตœ์‹  ASF ๋ฒ„์ „์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์ง์ ‘ Blacklist๋ฅผ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Blacklist๊ฐ€ ์—†๋‹ค๋ฉด, Valve๊ฐ€ ์ƒˆ๋กœ์šด ์„ธ์ผ ๋ฐฐ์ง€๋ฅผ ์ถœ์‹œํ•  ๋•Œ "๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก" ํ•˜๋ ค๋ฉด ASF๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜๋ฐ–์— ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค โ€“ ์ €๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ํ•ญ์ƒ ์ตœ์‹  ASF ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ƒˆ ASF ๋ฆด๋ฆฌ์Šค์˜ ์ƒˆ๋กœ์šด ํ•˜๋“œ์ฝ”๋”ฉ๋œ SalesBlacklist๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„œ๋„ ๊ธฐ์กด ASF๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ง์ ‘ ASF๋ฅผ "๊ณ ์น " ์ˆ˜ ์žˆ๋„๋ก ์ด ์†์„ฑ์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ด‡ ๋‹จ์œ„(bot-based) ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐพ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, fb, fbadd, fbrm **๋ช…๋ น์–ด**๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.


CommandPrefix

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ !์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF ๋ช…๋ น์–ด ์— ์‚ฌ์šฉ๋˜๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•œ ์ ‘๋‘์‚ฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ASF๊ฐ€ ๋‹น์‹ ์˜ ๋ง์„ ๋“ฃ๊ฒŒํ•˜๋ ค๋ฉด ๋ชจ๋“  ASF ๋ช…๋ น์–ด์˜ ์•ž์— ์ด๊ฒƒ์„ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ASF์˜ ๋ช…๋ น์–ด ์ ‘๋‘์‚ฌ๋ฅผ ์—†์• ๋ ค๊ณ  ์ด ๊ฐ’์„ null ํ˜น์€ ๋นˆ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ช…๋ น์–ด๋ฅผ ์ผ๋ฐ˜ ์‹๋ณ„์ž์™€ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ASF๋Š” CommandPrefix ์—†์ด ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•˜๋Š”๋ฐ ์ตœ์ ํ™”๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ASF์˜ ์„ฑ๋Šฅ์„ ์ž ์žฌ์ ์œผ๋กœ ์ค„์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์˜๋„์ ์œผ๋กœ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ASF๋Š” ASF ๋ช…๋ น์–ด๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์–ด์„œ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ๊ฐ’์ธ !๊ฐ€ ์‹ซ๋‹ค๋ฉด / ๊ฐ™์€ ์–ด๋–ค ๋ช…๋ น์–ด ์ ‘๋‘์‚ฌ(CommandPrefix)๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์„ ์œ„ํ•˜์—ฌ CommandPrefix๋Š” ASF ํ”„๋กœ์„ธ์Šค ์ „์ฒด์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ConfirmationsLimiterDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋“ฑ๋ก์ œํ•œ์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋‘๊ฐœ์˜ ์—ฐ์†๋œ 2๋‹จ๊ณ„ ์ธ์ฆ ํ™•์ธ ์‚ฌ์ด์— ์ ์–ด๋„ ConfirmationsLimiterDelay์ดˆ์˜ ๊ฐ„๊ฒฉ์„ ๋‘ก๋‹ˆ๋‹ค. ์ด๋Š” ASF 2๋‹จ๊ณ„ ์ธ์ฆ ์—์„œ 2faok ๋ช…๋ น์–ด ๋“ฑ์ด๋‚˜ ๋‹ค์–‘ํ•œ ๊ฑฐ๋ž˜๊ด€๋ จ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์š”์ฒญ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ํ…Œ์ŠคํŠธ์— ๋”ฐ๋ผ ์„ค์ •๋˜์—ˆ์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉด ์ด๋ณด๋‹ค ๋‚ฎ์ถฐ์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ConnectionTimeout

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 90์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ™œ๋™์˜ ํƒ€์ž„์•„์›ƒ์„ ์ดˆ๋‹จ์œ„๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ConnectionTimeout์€ HTTP์™€ IPC ์š”์ฒญ์˜ ํƒ€์ž„์•„์›ƒ์„ ์ •์˜ํ•˜๊ณ , ConnectionTimeout / 10์€ ์‹คํŒจํ•œ heartbeat ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ, ConnectionTimeout / 30์€ ์ตœ์ดˆ Steam ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์š”์ฒญ์— ํ—ˆ์šฉ๋˜๋Š” ๋ถ„๋‹จ์œ„ ์ˆซ์ž๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 90์€ ๋Œ€๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ํ•ฉํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด๋‚˜ PC ์‚ฌ์–‘์ด ๋‹ค์†Œ ๋А๋ฆฐ ํŽธ์ด๋ผ๋ฉด ์ด ์ˆ˜์น˜๋ฅผ ๋” ๋†’๊ฒŒ(์˜ˆ: 120) ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ํฐ ๊ฐ’์ด ๋А๋ฆฌ๊ฑฐ๋‚˜ ํ˜น์€ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Steam ์„œ๋ฒ„๋ฅผ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์•„๋‹˜์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ผ์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋‹ค์Œ์— ๋‹ค์‹œ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์ด์Šˆ๋ฅผ ํƒ์ง€ํ•˜๋Š”๋ฐ ๊ทน๋„์˜ ์ง€์—ฐ๊ณผ ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ASF๊ฐ€ ํŒŒ์‹ฑ์ค‘์ธ ์œ ํšจํ•œ ์š”์ฒญ๋„ ์ทจ์†Œํ•˜๊ฒŒ๋˜์–ด ์ „์ฒด์ ์ธ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ฌด๋Ÿฐ ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค. Steam ์„œ๋ฒ„๋Š” ์ข…์ข… ๋งค์šฐ ๋А๋ ค์งˆ ๋•Œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ASF ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์•ˆ์ •์ ์ด๋ผ๋Š” ๋ฏฟ์Œ๊ณผ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ์šฐ๋ฆฌ์˜ ์š”์ฒญ์„ ์ฃผ์–ด์ง„ ํƒ€์ž„์•„์›ƒ ๋‚ด์— ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๋Š” ์˜์‹ฌ ์‚ฌ์ด์˜ ๊ท ํ˜•์ ์ž…๋‹ˆ๋‹ค. ์ด์Šˆ๋ฅผ ๋” ๋นจ๋ฆฌ ํƒ์ง€ํ•˜๊ณ  ASF๊ฐ€ ๋” ๋นจ๋ฆฌ ์žฌ์—ฐ๊ฒฐ/๋ฐ˜์‘ํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.(ํ˜น์€ ์•„์ฃผ ์‚ด์ง ๋‚ฎ์€๊ฐ’, 60 ์ •๋„๋ฉด ASF๊ฐ€ ์ฐธ์„์„ฑ์ด ์•ฝ๊ฐ„ ์—†์–ด์ง‘๋‹ˆ๋‹ค.) ๋ฐ˜๋Œ€๋กœ ASF๊ฐ€ ์š”์ฒญ ์‹คํŒจ, heartbeat ์†์‹ค, Steam ์—ฐ๊ฒฐ ๋Š๊น€๊ณผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์•„๋‹ˆ๋ผ Steam ์ž์ฒด ๋ฌธ์ œ๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๊ฐ’์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž„์•„์›ƒ์„ ๋Š˜๋ฆฌ๋ฉด ASF๊ฐ€ ๋” "์ธ๋‚ด์‹ฌ ์žˆ๊ฒŒ" ๋™์ž‘ํ•˜์—ฌ ๋ฐ”๋กœ ์žฌ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ์„ ๋Š˜๋ ค์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ ์ƒํ™ฉ์œผ๋กœ๋Š”, Steam์ด ์™„์ „ํžˆ ์ˆ˜๋ฝํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์กฑํžˆ 2๋ถ„ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ๋งค์šฐ ํฐ ๊ฑฐ๋ž˜ ์ œ์•ˆ(trade offer)์„ ASF๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํƒ€์ž„์•„์›ƒ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ASF๋Š” ๋” ์ฐธ์„์„ฑ์ด ์žˆ๊ฒŒ๋˜๊ณ  ๊ฑฐ๋ž˜๊ฐ€ ์„ฑ์‚ฌ๋˜์ง€ ์•Š์•„์„œ ์ตœ์ดˆ ์š”์ฒญ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒฐ์ •์„ ํ•˜๊ธฐ ์ „์— ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ƒํ™ฉ์€ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ๋งค์šฐ ๋А๋ฆฐ ๊ธฐ๊ธฐ๋‚˜ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ๋“œ๋ฌธ ๊ฒฝ์šฐ๋กœ CPU/๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์€ ๊ฑฐ์˜ ๋ณดํ‹€๋„ฅ์„ ๊ฒช์ง€ ์•Š์ง€๋งŒ ์–ธ๊ธ‰ํ•ด๋‘˜ ๊ฐ€๋Šฅ์„ฑ์€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ๊ธฐ๋ณธ๊ฐ’์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ ์ ˆํ•˜์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ๋Š˜๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํƒ€์ž„์•„์›ƒ์„ ํฌ๊ฒŒ ์žก๋Š”๋‹ค๊ณ  ํ•ด์„œ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Steam ์„œ๋ฒ„๋ฅผ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๊ณ ์น ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ํ•œ์ฐธ ํฌ๊ฒŒํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


CurrentCulture

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์šด์˜์ฒด์ œ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ คํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ทธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญ๋œ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF๋ฅผ ๊ฑฐ์˜ ๋ชจ๋“  ๋Œ€์ค‘์  ์–ธ์–ด๋กœ ํ˜„์ง€ํ™” ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋•๋ถ„์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ๋“  OS๋ฅผ ๋ชจ๊ตญ์–ด๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ์ด ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์œผ๋กœ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ์œ ํšจํ•œ ์–ธ์–ด๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ๋ฆฌ์ŠคํŠธ๋Š” MSDN ์„ ๋ฐฉ๋ฌธํ•˜์—ฌ Language tag๋ฅผ ์ฐพ์•„๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ASF๋Š” "en-GB"์™€ ๊ฐ™์€ ํŠน์ • ๋ฌธํ™”๊ถŒ(culture)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "en"๊ณผ ๊ฐ™์€ ์ค‘๋ฆฝ์ ์ธ(neutral) ๋ฌธํ™”๊ถŒ๋„ ๋ชจ๋‘ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธํ™”๊ถŒ(culture)์„ ์ง€์ •ํ•˜๋ฉด ํ†ตํ™”/๋‚ ์งœ ํ˜•์‹ ๋“ฑ ๋ฌธํ™”๊ถŒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋‹ค๋ฅธ ๋™์ž‘์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ์•„๋‹Œ(non-native) ๋ฌธํ™”๊ถŒ์„ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ์–ธ์–ด ํŠน์œ ์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ๊ธ€๊ผด/์–ธ์–ด ํŒฉ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๋ฅผ ๋ชจ๊ตญ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์˜์–ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด ์†์„ฑ๊ฐ’์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.


Debug

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ ASF๋Š” config ๋””๋ ‰ํ† ๋ฆฌ ์˜†์— ํŠน๋ณ„ํ•œ debug ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ASF์™€ Steam ์„œ๋ฒ„๊ฐ„์˜ ๋ชจ๋“  ํ†ต์‹ ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ์ •๋ณด๋Š” ๋„คํŠธ์›Œํ‚น๊ณผ ์ผ๋ฐ˜์ ์ธ ASF ์ž‘์—…ํ๋ฆ„๊ณผ ๊ด€๋ จ๋œ ๋ถˆ์พŒํ•œ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋žจ ๋ฃจํ‹ด์€ ํ›จ์”ฌ ๋” ์ž์„ธํ•ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด WebBrowser๋Š” ์ผ๋ถ€ ์š”์ฒญ์ด ์™œ ์‹คํŒจํ•˜๋Š”์ง€ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ํ‘œ์‹œํ•˜๋Š”๋ฐ, ์ด ํ•ญ๋ชฉ์ด ์ผ๋ฐ˜ ASF ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š๋Š” ํ•œ ASF๋ฅผ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ASF๋ฅผ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์„ฑ๋Šฅ ๊ฐ์†Œ ๋ฐ ์•ˆ์ •์„ฑ์— ๋ถ€์ •์  ์˜ํ–ฅ์„ ์ฃผ๊ณ , ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ํ›จ์”ฌ ๋” ์ž์„ธํ•ด์ง€๋ฏ€๋กœ ํŠน์ • ์ด์Šˆ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ์žฌ์ƒ์‚ฐํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ ์‹คํŒจ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๋Š” ๋“ฑ ์˜ค์ง ์˜๋„ํ–ˆ์„๋•Œ๋งŒ ์งง๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์  ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋งŽ์€ ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜, ์ด์Šˆ, ์˜ˆ์™ธ๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ASF, Steam๊ณผ ์ด์ƒํ–‰๋™์„ ๋ชจ๋‘ ์ง์ ‘ ๋ถ„์„ํ•˜๋ ค๋ฉด ์ด์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ง€์‹์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ฒฝ๊ณ : ์ด ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด (๋„คํŠธ์›Œํฌ ๋กœ๊น…์œผ๋กœ ์ธํ•ด) Steam ๋กœ๊ทธ์ธ์— ์‚ฌ์šฉํ•˜๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ์ž ์žฌ์ ์œผ๋กœ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊นŒ์ง€ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” debug ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํ‘œ์ค€ log.txt(์ด ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ํ›จ์”ฌ ์ƒ์„ธํ•˜๊ฒŒ ๊ธฐ๋ก๋˜๋„๋ก ๋˜์–ด ์žˆ์Œ) ์–‘์ชฝ ๋ชจ๋‘์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ASF๊ฐ€ ์ƒ์„ฑํ•œ debug ์ฝ˜ํ…์ธ ๋ฅผ ์–ด๋– ํ•œ ๊ณต๊ฐœ๋œ ์žฅ์†Œ์—๋„ ๊ฒŒ์‹œํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ASF ๊ฐœ๋ฐœ์ž๋Š” ํ•ญ์ƒ ์ด๋ฅผ ๋ณธ์ธ์˜ ์ด๋ฉ”์ผ์ด๋‚˜ ๋‹ค๋ฅธ ๋ณด์•ˆ์ด ํ™•๋ณด๋œ ์žฅ์†Œ๋กœ ์ „์†กํ•˜๋„๋ก ์•ˆ๋‚ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ™œ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฒช๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— debug ๋ฃจํ‹ด์˜ ์ผ๋ถ€๋กœ ๊ธฐ๋ก๋  ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ASF ๋กœ๊น…์„ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ์‹œ๊ธธ ๊ถŒ์žฅ๋“œ๋ฆฌ์ง€๋งŒ, ๊ฑฑ์ •๋˜์‹ ๋‹ค๋ฉด ํ•ด๋‹น ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ ์ ˆํžˆ ๊ฐ€๋ ค์„œ(redact) ์ œ๊ณตํ•˜์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋ฆฌ๊ธฐ(redact)ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณ„ํ‘œ(*) ๋“ฑ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ์ค„์„ ์•„์˜ˆ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ์ž์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ค„์ด ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ์ž์ฒด๊ฐ€ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณด์กด๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


DefaultBot

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ASF๋Š” ํŠน์ • ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ฑ…์ž„์ด ์žˆ๋Š” "๊ธฐ๋ณธ ๋ด‡(default bot)"์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค โ€“ ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์ƒ ๋ด‡์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ IPC ๋ช…๋ น์ด๋‚˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฝ˜์†”์˜ ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ธฐ๋ณธ ๋ด‡์„ ์—ฌ๊ธฐ์— BotName์„ ์ž…๋ ฅํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ง€์ •ํ•œ ๋ด‡์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’์ธ null์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ASF๋Š” ๋Œ€์‹  ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋“ฑ๋ก๋œ ๋ด‡์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์„ค์ • ์†์„ฑ์€ IPC ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฝ˜์†” ๋ช…๋ น์—์„œ [Bots] ์ธ์ž๋ฅผ ์ƒ๋žตํ•˜๊ณ , ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ๋ด‡์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํ™œ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


FarmingDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 15์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด, ํ˜„์žฌ ํŒŒ๋ฐ ์ค‘์ธ ๊ฒŒ์ž„์—์„œ ์นด๋“œ๊ฐ€ ๋ชจ๋‘ ๋“œ๋กญ๋˜์—ˆ๋Š”์ง€๋ฅผ FarmingDelay๋ถ„๋งˆ๋‹ค ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๊ณผ๋„ํ•œ ์–‘์˜ Steam ์š”์ฒญ์ด ์ „์†ก๋  ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋Œ€๋กœ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํƒ€์ดํ‹€์ด ์™„์ „ํžˆ ํŒŒ๋ฐ๋˜์—ˆ์Œ์—๋„ ์ตœ๋Œ€ FarmingDelay๋ถ„ ๋™์•ˆ ASF๊ฐ€ ๊ณ„์† "ํŒŒ๋ฐ ์ค‘"์ธ ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถฉ๋ถ„ํžˆ ์ ํ•ฉํ•˜์ง€๋งŒ, ๋งŽ์€ ๋ด‡์„ ์šด์˜ ์ค‘์ด๋ผ๋ฉด ์ „์†ก๋˜๋Š” Steam ์š”์ฒญ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด 30๋ถ„ ์ •๋„๋กœ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ASF๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜(event-based) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Steam ์•„์ดํ…œ์ด ๋“œ๋กญ๋  ๋•Œ๋งˆ๋‹ค ๊ฒŒ์ž„ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜๋ฏ€๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ํ™•์ธํ•  ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Steam ๋„คํŠธ์›Œํฌ๋ฅผ ์™„์ „ํžˆ ์‹ ๋ขฐํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๊ทผ FarmingDelay๋ถ„ ๋™์•ˆ ์นด๋“œ ๋“œ๋กญ ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด(์˜ˆ: Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ์•„์ดํ…œ ๋“œ๋กญ์„ ์ œ๋Œ€๋กœ ์•Œ๋ ค์ฃผ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋“ฑ) ์–ด์จŒ๋“  ๊ฒŒ์ž„ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์ด ๊ฐ’์„ ์ค„์ด๋”๋ผ๋„ ํŒŒ๋ฐ ํšจ์œจ์€ ์ „ํ˜€ ๊ฐœ์„ ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์˜คํžˆ๋ ค ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๋งŒ ํฌ๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค โ€“ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์ธ 15๋ถ„์—์„œ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


FilterBadBots

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์•Œ๋ ค์ ธ ์žˆ๊ณ  ์•…์˜์ ์ธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ์‚ฌ์šฉ์ž(bad actor)๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ASF๊ฐ€ ์ž๋™์œผ๋กœ ๊ฑฐ๋ถ€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, ASF๋Š” ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ €ํฌ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋ก๋œ Steam ์‹๋ณ„์ž ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋ชฉ๋ก์— ์žˆ๋Š” ๋ด‡๋“ค์€ ์ €ํฌ๊ฐ€ ASF ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์— ์œ ํ•ดํ•˜๋‹ค๊ณ  ๋ถ„๋ฅ˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์šด์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ €ํฌ์˜ **ํ–‰๋™ ๊ฐ•๋ น**์„ ์œ„๋ฐ˜ํ•˜๊ฑฐ๋‚˜, **PublicListing**๊ณผ ๊ฐ™์ด ์ €ํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์•…์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์ฐฉ์ทจํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„์— DDoS ๊ณต๊ฒฉ์„ ๊ฐ€ํ•˜๋Š” ๋“ฑ ๋…ธ๊ณจ์ ์ธ ๋ฒ”์ฃ„ ํ–‰์œ„๋ฅผ ์ €์ง€๋ฅด๋Š” ๊ฒฝ์šฐ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋ฒˆ์ฐฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์ „๋ฐ˜์ ์ธ ๊ณต์ •์„ฑ, ์ •์ง์„ฑ, ํ˜‘๋ ฅ์„ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์†์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด์— ๋”ฐ๋ผ ์ €ํฌ๊ฐ€ ์œ ํ•ดํ•˜๋‹ค๊ณ  ๋ถ„๋ฅ˜ํ•œ ๋ด‡๋“ค์€ ์ œ๊ณต๋˜๋Š” ์„œ๋น„์Šค์—์„œ ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค. ์ €ํฌ์˜ ์ž…์žฅ์— ๋™์˜ํ•˜์ง€ ์•Š์•„ ์˜๋„์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ด‡๋“ค์ด ํ™œ๋™ํ•˜๋„๋ก(๊ณ„์ •์„ ์•…์šฉ๋‹นํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ) ํ—ˆ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๊ฐ•๋ ฅํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด, ์ด ์†์„ฑ์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.


GiftsLimiterDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋“ฑ๋ก์ œํ•œ์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‘๊ฐœ์˜ ์—ฐ์†๋œ ์„ ๋ฌผ/ํ‚ค/๋ผ์ด์„ผ์Šค ์ฒ˜๋ฆฌ(๋“ฑ๋ก) ์š”์ฒญ ์‚ฌ์ด์— ์ ์–ด๋„ GiftsLimiterDelay์ดˆ์˜ ๊ฐ„๊ฒฉ์„ ๋‘ก๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„, owns **๋ช…๋ น์–ด**์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒŒ์ž„ ๋ชฉ๋ก ์š”์ฒญ์— ๋Œ€ํ•œ ์ „์—ญ(global) ์ œํ•œ ์žฅ์น˜๋กœ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ๊ฐ•๋ ฅํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•˜์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


Headless

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ headless ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. headless ๋ชจ๋“œ์ผ ๋•Œ, ASF๋Š” ์ž์‹ ์ด ์„œ๋ฒ„๋‚˜ ๋‹ค๋ฅธ ๋น„๋Œ€ํ™”ํ˜•(non-interactive) ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ด๋ผ๊ณ  ๊ฐ„์ฃผํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์ฝ˜์†” ์ž…๋ ฅ์„ ํ†ตํ•ด ์–ด๋– ํ•œ ์ •๋ณด๋„ ์ฝ์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ•„์š” ์‹œ ์š”์ฒญ๋˜๋Š” ์„ธ๋ถ€์ •๋ณด(2FA ์ฝ”๋“œ, SteamGuard ์ฝ”๋“œ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ASF ์ž‘๋™์— ํ•„์š”ํ•œ ๊ณ„์ • ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๊ธฐํƒ€ ๋ณ€์ˆ˜)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ช…๋ น ์ฝ˜์†”๊ณผ ๊ฐ™์€ ๊ทธ ์™ธ ๋ชจ๋“  ์ฝ˜์†” ์ž…๋ ฅ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, Headless ๋ชจ๋“œ๋Š” ASF ์ฝ˜์†”์„ ์ฝ๊ธฐ ์ „์šฉ(read-only)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์ฃผ๋กœ ์„œ๋ฒ„์—์„œ ASF๋ฅผ ์šด์˜ํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2FA ์ฝ”๋“œ๋ฅผ ์š”์ฒญํ•˜๋Š” ๋Œ€์‹ , ASF๋Š” ํ•ด๋‹น ๊ณ„์ •์„ ์ •์ง€์‹œ์ผœ ์ž‘์—…์„ ์กฐ์šฉํžˆ ์ค‘๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ASF๋ฅผ ์šด์˜ ์ค‘์ด๋ฉฐ ASF๊ฐ€ non-headless ๋ชจ๋“œ์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ํ™•์ธํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์ด ์†์„ฑ์€ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. headless ๋ชจ๋“œ์—์„œ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฑฐ๋ถ€๋˜๋ฉฐ, ๊ณ„์ •์ด ์‹œ์ž‘ ์ค‘์— ์–ด๋– ํ•œ ์ฝ˜์†” ์ž…๋ ฅ์ด๋ผ๋„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์— ์œ ์šฉํ•œ๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ (๋ฌดํ•œ์ •) ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹ , ์ž๊ฒฉ ์ฆ๋ช…์„ ์š”๊ตฌ๋ฐ›์•˜์„ ๋•Œ ASF๊ฐ€ ๊ณ„์ • ๋กœ๊ทธ์ธ ์‹œ๋„๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ํ•„์š”ํ•œ ์ฝ˜์†” ์ž…๋ ฅ์„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด: ASF-ui(ASF API)๋ฅผ ํ†ตํ•˜๊ฑฐ๋‚˜, input ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ false๋กœ ๋‘์‹ญ์‹œ์˜ค.


IdleFarmingPeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 8์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ๋†์‚ฌ์ง€์„ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ์ฃผ๊ธฐ์ ์œผ๋กœ IdleFarmingPeriod ์‹œ๊ฐ„๋งˆ๋‹ค ๊ณ„์ •์— ์ƒˆ๋กœ์šด ๋†์‚ฌ์ง€์„ ๊ฒŒ์ž„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ–๊ฒŒ๋  ์ƒˆ ๊ฒŒ์ž„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ• ๋•Œ๋Š” ํ•„์š”์—†์Šต๋‹ˆ๋‹ค. ASF๋Š” ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ์ž๋™์œผ๋กœ ํ™•์ธํ•  ๋งŒํผ ๋˜‘๋˜‘ํ•ฉ๋‹ˆ๋‹ค. IdleFarmingPeriod๋Š” ์ฃผ๋กœ ์ด๋ฏธ ๊ฐ–๊ณ  ์žˆ๋Š” ์˜ค๋ž˜๋œ ๊ฒŒ์ž„์— ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒฝ์šฐ ์•„๋ฌด๋Ÿฐ ์•Œ๋ฆผ๋„ ์—†์–ด์„œ ์ด๊ฒƒ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ASF๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 0๊ฐ’์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๋„ ํ•จ๊ป˜ ํ™•์ธํ•ด๋ณด์„ธ์š”: FarmingPreferences์˜ ShutdownOnFarmingFinished ์„ค์ •.


InventoryLimiterDelay

๊ธฐ๋ณธ๊ฐ’์ด 4์ธ byte ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ASF๋Š” ์†๋„ ์ œํ•œ(rate-limit)์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋„๋ก, ์—ฐ์†๋˜๋Š” ๋‘ ์›น ์ธ๋ฒคํ† ๋ฆฌ ์š”์ฒญ ์‚ฌ์ด์— ์ตœ์†Œ InventoryLimiterDelay์ดˆ์˜ ๊ฐ„๊ฒฉ์„ ๋‘๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค โ€“ ์ด๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฒคํ† ๋ฆฌ ์•Œ๋ฆผ์„ ์ฝ์Œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋“œํŒŒํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์ž์‹ ์˜ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋ฐ, ASF๊ฐ€ ์ด๋ฅผ ์œ„ํ•ด ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ธ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ loot๋‚˜ transfer์™€ ๊ฐ™์€ ๋ช…๋ น์–ด์—๋Š” ์–ด๋– ํ•œ ์˜ํ–ฅ๋„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 4๋Š” 100๊ฐœ ์ด์ƒ์˜ ์—ฐ์†๋œ ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ์ฝ์Œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •๋˜์—ˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„(์ „๋ถ€๋Š” ์•„๋‹ˆ๋”๋ผ๋„)์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ด‡์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ ๋‹ค๋ฉด ์ด ๊ฐ’์„ ์ค„์ด๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ASF๋Š” ๋”œ๋ ˆ์ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  Steam ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ฝ์Œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด Steam์ด ์—ฌ๋Ÿฌ๋ถ„์˜ IP๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์–ด๋– ํ•œ ํ˜ธ์ถœ๋„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”. ๋งŽ์€ ์ธ๋ฒคํ† ๋ฆฌ ์š”์ฒญ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋‹ค์ˆ˜์˜ ๋ด‡์„ ์šด์˜ ์ค‘์ด๋ผ๋ฉด ์ด ๊ฐ’์„ ๋Š˜๋ ค์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋Œ€์‹  ํ•ด๋‹น ์š”์ฒญ์˜ ์ˆ˜ ์ž์ฒด๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


IPC

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF ํ”„๋กœ์„ธ์Šค์™€ ํ•จ๊ป˜ ์‹œ์ž‘๋˜๋Š” IPC ์„œ๋ฒ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. IPC๋Š” ๋กœ์ปฌ HTTP ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•จ์œผ๋กœ์จ, ASF-ui ์‚ฌ์šฉ์„ ํฌํ•จํ•œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (inter-process communication)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ ASF-ui๋ฅผ ํฌํ•จํ•˜์—ฌ ASF์™€ ์—ฐ๋™๋˜๋Š” ์„œ๋“œํŒŒํ‹ฐ IPC๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด ์—†๋‹ค๋ฉด, ์ด ์˜ต์…˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ํ™œ์„ฑํ™”๋œ ์ƒํƒœ(๊ธฐ๋ณธ ์˜ต์…˜)๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


IPCPassword

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ IPC๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋Š” ๋ชจ๋“  API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ํ•„์ˆ˜ ์•”ํ˜ธ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ถ”๊ฐ€ ๋ณด์•ˆ์ˆ˜๋‹จ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋นˆ ๊ฐ’์ด ์•„๋‹Œ๊ฒƒ์œผ๋กœ ์„ค์ •๋˜๋ฉด ๋ชจ๋“  IPC ์š”์ฒญ์€ ์—ฌ๊ธฐ์— ๋ช…์‹œ๋œ ์•”ํ˜ธ๋กœ ์„ค์ •๋œ ์ถ”๊ฐ€์ ์ธ password ์†์„ฑ๊ฐ’์„ ์š”๊ตฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ null์€ ์•”ํ˜ธ์š”๊ตฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด์„œ ASF๊ฐ€ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋‚ด์žฅ๋œ IPC ๋Œ€-๋ฌด์ž‘์œ„๊ณต๊ฒฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ์งฆ์€ ์‹œ๊ฐ„๋™์•ˆ ๋„ˆ๋ฌด ๋งŽ์€ ์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํŠน์ • IP ์ฃผ์†Œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


IPCPasswordFormat

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ IPCPassword ์†์„ฑ์˜ ํ˜•์‹(format)์„ ์ •์˜ํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ EHashingMethod ํƒ€์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ๋ณด์•ˆ(Security) ์„น์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. IPCPassword ์†์„ฑ์ด ์‹ค์ œ๋กœ ์ผ์น˜ํ•˜๋Š” IPCPasswordFormat์— ๋งž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, IPCPasswordFormat์„ ๋ณ€๊ฒฝํ•˜๋ฉด IPCPassword๋Š” ๋ชฉํ‘œ๋กœ๋งŒ ์‚ผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๋ฏธ ํ•ด๋‹น ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


LicenseID

๊ธฐ๋ณธ๊ฐ’์ด null์ธ Guid? ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์ €ํฌ **์Šคํฐ์„œ(sponsor)**๊ฐ€ ์œ ๋ฃŒ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ์„ ํƒ์  ๊ธฐ๋Šฅ์œผ๋กœ ASF๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š”, ์ด๋ฅผ ํ†ตํ•ด ItemsMatcher ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ MatchActively ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›”๊ฐ„ ๋ฐ ์ผํšŒ์„ฑ ๋“ฑ๊ธ‰์„ ์ œ๊ณตํ•˜๊ณ , ์™„์ „ ์ž๋™ํ™”์™€ ์ฆ‰์‹œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ GitHub ์ด์šฉ์„ ๊ถŒ์žฅ๋“œ๋ฆฌ์ง€๋งŒ, ํ˜„์žฌ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  **ํ›„์› ๋ฐฉ๋ฒ•**๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ›„์›ํ•˜์—ฌ ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ํšจํ•œ ์ˆ˜๋™ ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ **์ด ๊ฒŒ์‹œ๋ฌผ**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋“ , ASF ์Šคํฐ์„œ(sponsor)๋ผ๋ฉด **์—ฌ๊ธฐ**์—์„œ ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ์› ํ™•์ธ์„ ์œ„ํ•ด GitHub์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•˜๋ฉฐ, ์ฝ๊ธฐ ์ „์šฉ(read-only)์˜ ๊ณต๊ฐœ ์ •๋ณด์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„(username)๋งŒ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. LicenseID๋Š” f6a0529813f74d119982eb4fe43a9a24์™€ ๊ฐ™์ด 32์ž๋ฆฌ์˜ 16์ง„์ˆ˜ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ณธ์ธ์˜ LicenseID๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๊ณต์œ ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์ด๋Š” ๊ฐœ์ธ ๋‹จ์œ„๋กœ ๋ฐœ๊ธ‰๋˜๋ฏ€๋กœ, ์œ ์ถœ๋  ๊ฒฝ์šฐ ์ทจ์†Œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ๋ผ๋„ ์‹ค์ˆ˜๋กœ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ๊ฐ™์€ ๊ณณ์—์„œ ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์ธ ASF ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๊ฑฐ๋‚˜ ์ œ๊ณตํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.


LoginLimiterDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋“ฑ๋ก์ œํ•œ์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‘๊ฐœ์˜ ์—ฐ์†๋œ ์—ฐ๊ฒฐ ์‹œ๋„ ์‚ฌ์ด์— ์ ์–ด๋„ LoginLimiterDelay์ดˆ์˜ ๊ฐ„๊ฒฉ์„ ๋‘ก๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 10์€ 100๊ฐœ ์ด์ƒ์˜ ๋ด‡ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •๋˜์—ˆ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„(์ „๋ถ€๋Š” ์•„๋‹ˆ๋”๋ผ๋„)์˜ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ด‡์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ์ ๋‹ค๋ฉด ์ด ๊ฐ’์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด๊ฑฐ๋‚˜, ์‹ฌ์ง€์–ด 0์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ASF๋Š” ๋”œ๋ ˆ์ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  Steam์— ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ด‡์ด ๋„ˆ๋ฌด ๋งŽ์€ ์ƒํƒœ์—์„œ ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด Steam์ด ์—ฌ๋Ÿฌ๋ถ„์˜ IP๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด InvalidPassword/RateLimitExceeded ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๋กœ๊ทธ์ธ ์ž์ฒด๊ฐ€ ์™„์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, ์ด๋Š” ASF๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ Steam ํด๋ผ์ด์–ธํŠธ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํŠนํžˆ ๋™์ผํ•œ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ Steam ํด๋ผ์ด์–ธํŠธ/๋„๊ตฌ์™€ ํ•จ๊ป˜ ๊ณผ๋„ํ•œ ์ˆ˜์˜ ๋ด‡์„ ์šด์˜ ์ค‘์ด๋ผ๋ฉด, ๋กœ๊ทธ์ธ์„ ๋” ๊ธด ์‹œ๊ฐ„์— ๊ฑธ์ณ ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ด ๊ฐ’์„ ๋Š˜๋ ค์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ด ๊ฐ’์€ SendTradePeriod์—์„œ์˜ ๊ฑฐ๋ž˜(trade)์™€ ๊ฐ™์ด ASF๊ฐ€ ์˜ˆ์•ฝํ•œ(scheduled) ๋ชจ๋“  ์ž‘์—…์—์„œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ(load-balancing) ๋ฒ„ํผ๋กœ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MaxFarmingTime

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค. ์•„์‹œ๋‹ค์‹œํ”ผ Steam์ด ํ•ญ์ƒ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์‹ค์ œ๋กœ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ด ์ค‘์ž„์—๋„ ํ”Œ๋ ˆ์ดํƒ€์ž„์ด ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š” ๋“ฑ ์ด์ƒํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ASF๋Š” ํ•œ ๊ฒŒ์ž„์„ ์†”๋กœ๋ชจ๋“œ๋กœ ์ตœ๋Œ€ MaxFarmingTime ์‹œ๊ฐ„๋™์•ˆ ๋†์‚ฌ์ง€์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ›„์—๋Š” ์™„์ „ํžˆ ๋†์‚ฌ๋ฅผ ์ง€์€๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋Ÿฌํ•œ ์ด์ƒ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋ฉฐ, Steam์ด ์–ด๋–ค ์ด์œ ๋กœ๋“  ASF์˜ ์ง„ํ–‰์„ ๋ง‰๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์ง€๋ฅผ ์ถœ์‹œํ•œ ๊ฒฝ์šฐ(์ฐธ๊ณ : Blacklist)์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 10์‹œ๊ฐ„์ด๋ฉด ํ•œ ๊ฒŒ์ž„์˜ ๋ชจ๋“  Steam ์นด๋“œ๋ฅผ ๋“œ๋กญํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ •์ƒ์ ์ธ ๊ฒŒ์ž„์ด ๊ฑด๋„ˆ๋›ฐ์–ด์งˆ ์ˆ˜ ์žˆ๊ณ (์‹ค์ œ๋กœ ํŒŒ๋ฐ์— ์ตœ๋Œ€ 9์‹œ๊ฐ„๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ •์ƒ์ ์ธ ๊ฒŒ์ž„๋„ ์žˆ์Šต๋‹ˆ๋‹ค), ๋ฐ˜๋Œ€๋กœ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํ•˜๋‚˜์˜ ํŒŒ๋ฐ ์„ธ์…˜์—์„œ ๋‹จ์ผ ๊ฒŒ์ž„์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ(๋”ฐ๋ผ์„œ ์ „์ฒด ๋Œ€๊ธฐ์—ด์„ ๋ชจ๋‘ ๊ฑฐ์นœ ํ›„ ASF๋Š” ํ•ด๋‹น ํƒ€์ดํ‹€๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค), ์ด ํ”Œ๋ ˆ์ดํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ASF ๋‚ด๋ถ€์˜ ํŒŒ๋ฐ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฏ€๋กœ, ์žฌ์‹œ์ž‘ ์ดํ›„์—๋„ ASF๋Š” ํ•ด๋‹น ํƒ€์ดํ‹€๋กœ ๋‹ค์‹œ ๋Œ์•„์˜จ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MaxTradeHoldDuration

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 15์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์ €ํฌ๊ฐ€ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ž˜ ๋ณด๋ฅ˜(trade hold)์˜ ์ตœ๋Œ€ ๊ธฐ๊ฐ„(์ผ ๋‹จ์œ„)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค โ€“ ASF๋Š” ๊ฑฐ๋ž˜(trading) ์„น์…˜์— ์ •์˜๋œ ๋Œ€๋กœ MaxTradeHoldDuration์ผ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋ณด๋ฅ˜ ์ค‘์ธ ๊ฑฐ๋ž˜๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ TradingPreferences๊ฐ€ SteamTradeMatcher๋กœ ์„ค์ •๋œ ๋ด‡์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ, Master/SteamOwnerID ๊ฑฐ๋ž˜๋‚˜ ๊ธฐ๋ถ€(donation)์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ๋ณด๋ฅ˜๋Š” ๋ชจ๋‘์—๊ฒŒ ์„ฑ๊ฐ€์‹  ์กด์žฌ์ด๋ฉฐ, ๋ˆ„๊ตฌ๋„ ์ด๋ฅผ ๊ตณ์ด ์ƒ๋Œ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ASF๋Š” ๊ด€๋Œ€ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ž‘๋™ํ•˜๋ฉฐ ๊ฑฐ๋ž˜ ๋ณด๋ฅ˜ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ๋ชจ๋‘๋ฅผ ๋•๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค โ€“ ๊ทธ๋ž˜์„œ ์ด ์˜ต์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 15๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฑฐ๋ž˜ ๋ณด๋ฅ˜์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— 0์„ ์ง€์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜(trading) ์„น์…˜์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์ˆ˜๋ช…์ด ์งง์€ ์นด๋“œ๋Š” ์ด ์˜ต์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ ๊ฑฐ๋ž˜ ๋ณด๋ฅ˜ ์ค‘์ธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ๊ฑฐ๋ถ€๋˜๋ฏ€๋กœ, ๊ทธ๊ฒƒ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์ „์ฒด์ ์œผ๋กœ ๊ฑฐ๋ถ€ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MinFarmingDelayAfterBlock

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 60์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€, ํ˜„์žฌ ํŒŒ๋ฐ ์ค‘์ธ ASF๋ฅผ ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐ ํ•ด์ œ์‹œ์ผฐ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” LoggedInElsewhere๋กœ ์ธํ•ด ์ด์ „์— ์—ฐ๊ฒฐ์ด ๋Š๊ธด ๊ฒฝ์šฐ, ์นด๋“œ ํŒŒ๋ฐ์„ ์žฌ๊ฐœํ•˜๊ธฐ ์ „๊นŒ์ง€ ASF๊ฐ€ ๋Œ€๊ธฐํ•  ์ตœ์†Œ ์‹œ๊ฐ„(์ดˆ ๋‹จ์œ„)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋”œ๋ ˆ์ด๋Š” ์ฃผ๋กœ ํŽธ์˜์„ฑ ๋ฐ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฌธ์ œ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, playing lock์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ํ’€๋ ธ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ASF๊ฐ€ ๋‹ค์‹œ ๊ณ„์ •์„ ์ ์œ ํ•ด๋ฒ„๋ ค ์ด์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฒŒ์ž„์„ ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์„ธ์…˜์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ฉด LoggedInElsewhere ์—ฐ๊ฒฐ ํ•ด์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ASF๋Š” ์ „์ฒด ์žฌ์—ฐ๊ฒฐ ์ ˆ์ฐจ๋ฅผ ๋‹ค์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋ฉฐ, ์ด๋Š” ๊ธฐ๊ธฐ์™€ Steam ๋„คํŠธ์›Œํฌ์— ์ถ”๊ฐ€์ ์ธ ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์—ฐ๊ฒฐ ํ•ด์ œ๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ฐ’์€ 60์ดˆ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ํฐ ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ๊ฒŒ์ž„์„ ์žฌ์‹œ์ž‘ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฐ’์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์ž์ฃผ ๋Š๊ธฐ๊ณ  ASF๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๊ณ„์ •์„ ๋‹ค์‹œ ์ ์œ ํ•ด๋ฒ„๋ ค์„œ, ๊ฒฐ๊ตญ ์—ฌ๋Ÿฌ๋ถ„์ด ์ง์ ‘ ์žฌ์—ฐ๊ฒฐ ๊ณผ์ •์„ ๋‹ค์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์—๋Š” ์ตœ๋Œ€ 255๊นŒ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ผ๋ฐ˜์ ์ธ ๋ชจ๋“  ์ƒํ™ฉ์— ์ถฉ๋ถ„ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์œ„ ๋‚ด์šฉ์— ๋”ํ•ด, ๋”œ๋ ˆ์ด๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ 0 ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์•„์˜ˆ ์—†์•จ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•ž์„œ ์–ธ๊ธ‰ํ•œ ์ด์œ ๋“ค๋กœ ์ธํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


OptimizationMode

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋Ÿฐํƒ€์ž„ ์ค‘ ASF๊ฐ€ ์„ ํ˜ธํ•  ์ตœ์ ํ™” ๋ชจ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ASF๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค โ€“ MaxPerformance๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 0, ๊ทธ๋ฆฌ๊ณ  MinMemoryUsage๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 1์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ASF๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์ž‘์—…์„ ๋ณ‘๋ ฌ(๋™์‹œ์—)๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋ฉฐ, ์ด๋Š” ๋ชจ๋“  CPU ์ฝ”์–ด, ๋‹ค์ค‘ CPU ์Šค๋ ˆ๋“œ, ๋‹ค์ค‘ ์†Œ์ผ“, ๋‹ค์ค‘ ์Šค๋ ˆ๋“œํ’€ ์ž‘์—…์— ๊ฑธ์ณ ์ž‘์—…์„ ๋ถ€ํ•˜ ๋ถ„์‚ฐํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ASF๋Š” ํŒŒ๋ฐํ•  ๊ฒŒ์ž„์„ ํ™•์ธํ•  ๋•Œ ์ฒซ ๋ฒˆ์งธ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๊ณ , ์š”์ฒญ์ด ๋„์ฐฉํ•˜๋ฉด ์‹ค์ œ๋กœ ๋ช‡ ๊ฐœ์˜ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š”์ง€ ์ฝ์–ด๋“ค์ธ ๋‹ค์Œ, ๋‚˜๋จธ์ง€ ํŽ˜์ด์ง€๋“ค์„ ๋™์‹œ์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฏธ๋ฏธํ•˜๊ณ , ASF์˜ ๋น„๋™๊ธฐ(asynchronous) ์ฝ”๋“œ๋กœ ์ธํ•œ ์ด์ ์€ CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๊ณ  ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ œํ•œ๋œ ๋งค์šฐ ์˜ค๋ž˜๋œ ํ•˜๋“œ์›จ์–ด์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฑฐ์˜ ํ•ญ์ƒ ์ด ๋ฐฉ์‹์„ ์›ํ•˜์‹œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ์ž‘์—…์ด ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ, ASF ๋Ÿฐํƒ€์ž„์€ ์†Œ์ผ“์„ ์—ด๋ฆฐ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ์‚ด์•„์žˆ๊ฒŒ ํ•˜๋ฉฐ ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•˜๋Š” ๋“ฑ ์ด๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋•Œ๋•Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ทน๋„๋กœ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ด ์†์„ฑ์„ 1(MinMemoryUsage)๋กœ ์ „ํ™˜ํ•˜์—ฌ ASF๊ฐ€ ์ตœ๋Œ€ํ•œ ์ ์€ ์ž‘์—…๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ , ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™๊ธฐ(synchronous) ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ **์ €๋ฉ”๋ชจ๋ฆฌ ์„ค์ •(low-memory setup)**์„ ์‚ฌ์ „์— ์ฝ์–ด๋ณด์…จ๊ณ , ๋งค์šฐ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ๋ฅผ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ํฌ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ „ํ™˜์„ ๊ณ ๋ คํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์˜ต์…˜์€ ํ›จ์”ฌ ๋” ๋‚˜์œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๋Š”๋ฐ, **์ €๋ฉ”๋ชจ๋ฆฌ ์„ค์ •(low-memory setup)**์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ASF ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ๋Ÿฐํƒ€์ž„์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋“ฑ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ์— ๋น„ํ•ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MinMemoryUsage๋Š” ๋‹ค๋ฅธ (ํ›จ์”ฌ ๋” ๋‚˜์€) ์˜ต์…˜๋“ค๋กœ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ์„ ๋•Œ, ๋Ÿฐํƒ€์ž„์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ง์ „์˜ ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ๊ฐ•๋ ฅํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•˜์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


PluginsUpdateList

ImmutableHashSet<string> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์•„๋ž˜์— ์ •์˜๋œ PluginsUpdateMode์— ๋”ฐ๋ผ, ์ž๋™ ์—…๋ฐ์ดํŠธ ๋Œ€์ƒ์œผ๋กœ ๊ณ ๋ ค๋  ๋•Œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๋˜๋Š” ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋กœ ์ฒ˜๋ฆฌ๋  ํ”Œ๋Ÿฌ๊ทธ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ ์ด๋ฆ„ ๋ชฉ๋ก์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


PluginsUpdateMode

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์œ„์— ์ •์˜๋œ PluginsUpdateList์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ ๋ชจ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์„ ์ง€์ •ํ•˜๋ฉด ์„ ์–ธ๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ’ 0์€ Whitelist๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, PluginsUpdateList์— ์ •์˜๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ’ 1์€ Blacklist๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, PluginsUpdateList์— ์ •์˜๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ASF ํŒ€์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์•ˆ์ „์„ ์œ„ํ•ด, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์‹œ๊ธธ ๋‹ค์‹œ ํ•œ๋ฒˆ ์•ˆ๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์•…์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ด ์„ค์ •๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์Šค์Šค๋กœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์›๊ฒฉ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ด ์„ค์ •์€ ์˜ค์ง ASF๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์—๋งŒ ์ ์šฉ๋˜๋ฉฐ, ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ ์ ˆํžˆ ๊ฒ€์ฆํ–ˆ๋Š”์ง€๋Š” ์—ฌ์ „ํžˆ ์ง์ ‘ ํ™•์ธํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ASF ์—…๋ฐ์ดํŠธ ๋ฃจํ‹ด์ธ UpdateChannel ๋ฐ **UpdatePeriod**์™€ ํ•จ๊ป˜ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. update ๋ช…๋ น์–ด์™€ ๊ฐ™์€ ํ‘œ์ค€ ASF ์—…๋ฐ์ดํŠธ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋„ ์„ ํƒ์  ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•จ๊ป˜ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ASF ๋ฒ„์ „์„ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, updateplugins ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ShutdownIfPossible

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”ํ•˜๋ฉด, ASF๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ โ€“ ์ฆ‰ ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋ด‡์ด ์ •์ง€๋œ ๊ฒฝ์šฐ โ€“ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ด‡ ์ธ์Šคํ„ด์Šค์— ShutdownOnFarmingFinished๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•˜๋ฉด ํŠนํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ด‡์˜ ํŒŒ๋ฐ์ด ๋๋‚ฌ์„ ๋•Œ ASF๊ฐ€ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋Œ€๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด IPC ์‚ฌ์šฉ ๋“ฑ์„ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰ ์ค‘์ด๊ธธ ๊ธฐ๋Œ€ํ•˜๋ฏ€๋กœ, ์ด ์˜ต์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


SteamMessagePrefix

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ "/me "์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF๊ฐ€ ๋ณด๋‚ด๋Š” ๋ชจ๋“  Steam ๋ฉ”์‹œ์ง€์— ๋ถ™๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "/me " ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Steam ๋Œ€ํ™”์—์„œ ๋ด‡ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. "/pre " ์ ‘๋‘์‚ฌ๋„ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด์ง€๋งŒ ๋‹ค๋ฅธ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋ฅผ ์™„์ „ํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ASF ๋ฉ”์‹œ์ง€๋ฅผ ์ „ํ†ต์  ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋ ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ๋นˆ ๋ฌธ์ž์—ด์ด๋‚˜ null๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ Steam ๋ฉ”์‹œ์ง€์—๋งŒ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. IPC์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ฑ„๋„์„ ํ†ตํ•ด ๋Œ์•„์˜ค๋Š” ์‘๋‹ต์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ASF ํ–‰๋™์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’ ๊ทธ๋Œ€๋กœ ๋‘๋Š”๊ฒƒ๋„ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.


SteamOwnerID

ulong ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF ํ”„๋กœ์„ธ์Šค ์†Œ์œ ์ž์˜ 64๋น„ํŠธ ํ˜•ํƒœ๋กœ ๋œ Steam ID๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ด‡ ์ธ์Šคํ„ด์Šค(์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ •์ด ์•„๋‹™๋‹ˆ๋‹ค)์˜ ์ฃผ์ธ(Master) ๊ถŒํ•œ๊ณผ ๋งค์œ  ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹  ์ž์‹ ์˜ ๋ฉ”์ธ Steam ๊ณ„์ •์˜ ID๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ธ(Master) ๊ถŒํ•œ์€ ๋ด‡ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์ œ์–ด๋ฅผ ๊ฐ–์ง€๋งŒ, exit, restart ๋˜๋Š” update ๊ฐ™์€ ์ผ๋ฐ˜ ํ™˜๊ฒฝ์˜ ๋ช…๋ น์–ด๋Š” SteamOwnerID ์ „์šฉ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์นœ๊ตฌ๋“ค์„ ์œ„ํ•ด ๋ด‡์„ ์‹คํ–‰ํ•˜๋ฉด์„œ๋„, exit ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋“ฑ ASF ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜์ง€๋Š” ๋ชปํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 0์€ ASF ํ”„๋กœ์„ธ์Šค์˜ ์†Œ์œ ์ž๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์œผ๋กœ, ์ผ๋ฐ˜ ASF ๋ช…๋ น์„ ๋ˆ„๊ตฌ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ Steam ์ฑ„ํŒ…์—๋งŒ ์ ์šฉ๋œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”. **IPC**์™€ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฝ˜์†”์—์„œ๋Š” ์ด ์†์„ฑ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์—ฌ์ „ํžˆ Owner ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


SteamProtocols

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 7์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF๊ฐ€ Steam ์„œ๋ฒ„์— ์ ‘์†ํ• ๋•Œ ์‚ฌ์šฉํ•  Steam ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ •์˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํ”„๋กœํ† ์ฝœ ์—†์Œ
1 TCP Transmission Control Protocol
2 UDP User Datagram Protocol
4 WebSocket WebSocket

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด **JSON ๋งคํ•‘**์„ ํ™•์ธํ•ด๋ณด์„ธ์š”. ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None) ์˜ต์…˜๊ณผ ๋™์ผํ•˜๋ฉฐ, ์ด๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ASF๋Š” ๋‹ค์šดํƒ€์ž„(downtime) ๋ฐ ์ด์™€ ์œ ์‚ฌํ•œ Steam ๋ฌธ์ œ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  Steam ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๊ฐ€ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํŠน์ • ํ”„๋กœํ† ์ฝœ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ด ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ์น˜๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฉํ™”๋ฒฝ์—์„œ UDP ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•˜๊ณ  TCP ํŠธ๋ž˜ํ”ฝ๋งŒ ํ†ต๊ณผํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ํ˜น์€ WebProxy๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ ์ด๋ฅผ Steam ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์—๋„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค(์ด๋Š” WebSocket ํ”„๋กœํ† ์ฝœ์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค).

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


UpdateChannel

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ž๋™ ์—…๋ฐ์ดํŠธ(UpdatePeriod ๊ฐ€ 0๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ)๋‚˜ ์—…๋ฐ์ดํŠธ ์•Œ๋ฆผ์—์„œ ์‚ฌ์šฉํ•  ์—…๋ฐ์ดํŠธ ์ฑ„๋„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ASF๋Š” ์„ธ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ ์ฑ„๋„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค โ€“ None์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 0, Stable์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 1, ๊ทธ๋ฆฌ๊ณ  PreRelease๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 2์ž…๋‹ˆ๋‹ค. ์•ˆ์ •(Stable) ์ฑ„๋„์€ ๊ธฐ๋ณธ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„๋กœ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. PreRelease ์ฑ„๋„์€ Stable ๋ฆด๋ฆฌ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฒ„๊ทธ ์ˆ˜์ •์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ •๋œ ๊ฐœ์„  ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž ๋ฐ ๊ธฐํƒ€ ๊ฐœ๋ฐœ์ž ์ „์šฉ์˜ pre-release๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. PreRelease ๋ฒ„์ „์—๋Š” ์•„์ง ํŒจ์น˜๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ, ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ, ๋˜๋Š” ์ƒˆ๋กœ ์ž‘์„ฑ๋œ ๊ตฌํ˜„์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์Šค์Šค๋กœ๋ฅผ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 1(Stable) ์—…๋ฐ์ดํŠธ ์ฑ„๋„์„ ์œ ์ง€ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. PreRelease ์ฑ„๋„์€ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๋Š” ๋ฒ•์„ ์•Œ๊ณ , ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํ”ผ๋“œ๋ฐฑ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ฑ„๋„์ž…๋‹ˆ๋‹ค - ๊ธฐ์ˆ  ์ง€์›์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ASF์˜ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ๋ฒ„์ „ํ™•์ธ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด UpdateChannel์„ 0(์—†์Œ(None))์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. UpdateChannel์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด update ๋ช…๋ น์„ ํฌํ•จํ•œ ์—…๋ฐ์ดํŠธ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ UpdatePeriod ์„ค๋ช…์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฌธ์ œ์— ๋…ธ์ถœ๋˜๋ฏ€๋กœ ์—†์Œ(None) ์ฑ„๋„์€ ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๋ญ”์ง€ ์•Œ๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


UpdatePeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 24์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ASF๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ™•์ธํ• ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ํŒจ์น˜๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•ด์„œ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฒ„๊ทธ์ˆ˜์ •, ์„ฑ๋Šฅ๊ฐœ์„ , ์•ˆ์ •์„ฑ ํ–ฅ์ƒ ๋“ฑ์„ ์œ„ํ•ด์„œ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. 0๋ณด๋‹ค ํฐ ๊ฐ’์ด ์„ค์ •๋˜๋ฉด ASF๋Š” ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฐ›์•„ ๊ต์ฒดํ•˜๊ณ  ์žฌ์‹œ์ž‘(AutoRestart๊ฐ€ ํ—ˆ์šฉ๋œ ๊ฒฝ์šฐ)ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ASF๋Š” ๋งค UpdatePeriod ์‹œ๊ฐ„๋งˆ๋‹ค ์ƒˆ ์—…๋ฐ์ดํŠธ๊ฐ€ GitHub repo์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 0 ๊ฐ’์€ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ update ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. UpdateChannel์— ๋”ฐ๋ผ UpdatePeriod๊ฐ€ ์ ์ ˆํžˆ ์„ค์ •๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์—๋„ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ๊ณผ์ •์—์„œ๋Š” ASF๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ํด๋” ๊ตฌ์กฐ ์ „์ฒด๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€๋งŒ, config ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋ณธ์ธ์˜ ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ์ฆ‰, ASF ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ์žˆ๋Š” ASF์™€ ๊ด€๋ จ ์—†๋Š” ์ถ”๊ฐ€ ํŒŒ์ผ๋“ค์€ ์—…๋ฐ์ดํŠธ ๊ณผ์ •์—์„œ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 24๋Š” ๋ถˆํ•„์š”ํ•œ ํ™•์ธ๊ณผ ์ถฉ๋ถ„ํžˆ ์ƒˆ์ œํ’ˆ๊ฐ„์˜ ์ ์ ˆํ•œ ๊ท ํ˜•์ ์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋น„ํ™œ์„ฑํ™”ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‹น์‹  ์ž์‹ ์„ ์œ„ํ•ด์„œ ํ•ฉ๋ฆฌ์ ์ธ UpdatePeriod ๊ธฐ๊ฐ„์œผ๋กœ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ตœ์‹ ์˜ ์•ˆ์ • ASF ๋ฆด๋ฆฌ์Šค๋งŒ ์ง€์›ํ•˜๋ฉฐ, ์ตœ์‹  ๋ฒ„์ „์—๋งŒ ๋ณด์•ˆ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์˜ค๋ž˜๋œ ASF ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ž‘์€ ๋ฒ„๊ทธ๋ถ€ํ„ฐ ๊ธฐ๋Šฅ ๊นจ์ง, ์ข…๊ตญ์—๋Š” ์˜๊ตฌ์ ์ธ Steam ๊ณ„์ • ์ •์ง€ ๊นŒ์ง€ ์˜จ๊ฐ– ์ข…๋ฅ˜์˜ ์ด์Šˆ์— ์ผ๋ถ€๋Ÿฌ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ž์‹ ์„ ์œ„ํ•ด์„œ ํ•ญ์ƒ ASF๋ฅผ ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ผ์ด ์ปค์ง€๊ธฐ ์ „์— ๋น„ํ™œ์„ฑํ™” ํ•˜๊ฑฐ๋‚˜ ํŒจ์น˜ํ•˜์—ฌ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ด์Šˆ์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋ฉด ๋ชจ๋“  ๋ณด์•ˆ์„ฑ ๋ณด์žฅ์„ ๋ฒ„๋ฆฌ๊ณ  Steam ๋„คํŠธ์›Œํฌ ๋ฟ ์•„๋‹ˆ๋ผ ์ž์‹ ์˜ Steam ๊ณ„์ •์—๋„ ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


WebLimiterDelay

ushort ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 300์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋™์ผํ•œ Steam ์›น์„œ๋น„์Šค์— ์ „์†กํ•œ ๋‘๊ฐœ์˜ ์—ฐ์†ํ•œ ์š”์ฒญ๊ฐ„์˜ ์ตœ์†Œ ์ง€์—ฐ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ง€์—ฐ์€ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ๋ณด๋‚ด์ง„ ์š”์ฒญ์˜ ์ „์ฒด ๊ฑด ์ˆ˜์— ๋”ฐ๋ฅธ ๋“ฑ๋ก ํ™œ์„ฑํ™” ์ œํ•œ์„ ํฌํ•จํ•ด์„œ Steam์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” AkamaiGhost ์„œ๋น„์Šค์˜ ํ˜•ํƒœ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ์ƒํ™ฉ์—์„œ akamai ์ฐจ๋‹จ์€ ์ž˜ ์ผ์–ด๋‚˜์ง€ ์•Š์ง€๋งŒ, ๊ฑฐ๋Œ€ํ•˜๊ณ  ์ง€์†์ ์ธ ์ผ๋ จ์˜ ์š”์ฒญ์œผ๋กœ ๋งค์šฐ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜๋‹ค๋ฉด ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„๋™์•ˆ ๋งค์šฐ ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ ์ฐจ๋‹จ์ด ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ ASF๊ฐ€ steamcommunity.com, api.steampowered.com ๊ทธ๋ฆฌ๊ณ  store.steampowered.com์™€ ๊ฐ™์€ Steam ์›น์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š” ์œ ์ผํ•œ ๋„๊ตฌ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์›น์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด ๊ทธ ๋„๊ตฌ์— WebLimiterDelay์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ์–‘ ์ชฝ ๋ชจ๋‘๋ฅผ ๊ธฐ๋ณธ๊ฐ’์˜ ๋‘๋ฐฐ์ธ 600 ์ •๋„๋กœ ์„ค์ •ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด๋–ค ๊ฒฝ์šฐ์—์„œ๊ฑด ํ•œ๊ฐœ์˜ ์š”์ฒญ์ด 300 ms์„ ๋„˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ WebLimiterDelay๋ฅผ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ๋‚ฎ์ถ”๋Š” ๊ฒƒ์€ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IP ๊ด€๋ จ ์ฐจ๋‹จ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์ค‘ ์ผ๋ถ€๋Š” ์˜๊ตฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์„œ๋ฒ„์—์„œ ๋‹จ์ผ ASF ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ๋„ ์ถฉ๋ถ„ํ•˜๊ณ , ์›๋ณธ Steam ํด๋ผ์ด์–ธํŠธ์™€ ํ•จ๊ป˜ ASF๋ฅผ ์ •์ƒ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์ด ์ ์ ˆํ•˜๋ฉฐ, ๊ฐ’์„ ์กฐ์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‚ฎ์ถ”์ง€ ๋ง๊ณ  ๋Š˜๋ฆฌ๊ธฐ๋งŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹จ์ผ IP์—์„œ ๋‹จ์ผ Steam ๋„๋ฉ”์ธ์œผ๋กœ ๋ณด๋‚ด์ง€๋Š” ๋ชจ๋“  ์š”์ฒญ์˜ ์ „์ฒด ์ˆซ์ž๋Š” ์ ˆ๋Œ€ 300 ms ๋‹น 1๊ฐœ ์š”์ฒญ์„ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


WebProxy

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋‚ด๋ถ€ http ๊ด€๋ จ ํ†ต์‹ , ํŠนํžˆ github.com, api.steampowered.com, steamcommunity.com, store.steampowered.com๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋  ์›น ํ”„๋ก์‹œ ์ฃผ์†Œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์ผ๋ฐ˜(๋ด‡์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š”) ํ†ต์‹ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋ด‡์˜ WebProxy ์„ค์ • ์†์„ฑ์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ด‡๋ณ„ ํ†ต์‹ ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ASF ์š”์ฒญ์„ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐฉํ™”๋ฒฝ, ํŠนํžˆ ์ค‘๊ตญ์˜ ๋งŒ๋ฆฌ๋ฐฉํ™”๋ฒฝ์„ ์šฐํšŒํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์€ uri ๋ฌธ์ž์—ด๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

URI ๋ฌธ์ž์—ด์€ ์Šคํ‚ด(ํ”„๋กœํ† ์ฝœ)(์ง€์› ํ˜•์‹: http/https/socks4/socks4a/socks5), ํ˜ธ์ŠคํŠธ, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ ์‚ฌํ•ญ์ธ ํฌํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์™„์ „ํ•œ uri ๋ฌธ์ž์—ด์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. "http://contoso.com:8080".

ํ”„๋ก์‹œ๊ฐ€ ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๋ฉด, WebProxyUsername๊ณผ WebProxyPassword๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ Steam ๋„คํŠธ์›Œํฌ ํ†ต์‹ (CM)๋„ ํ”„๋ก์‹œ๋กœ ์šฐํšŒ์‹œํ‚ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๋ด‡์˜ SteamProtocols ์†์„ฑ์„ ์˜ค์ง websocket ์ „์†ก๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฐ’, ์ฆ‰ 4๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋กœ๋Š” websocket๋งŒ ์ง€์›๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


WebProxyPassword

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ƒ WebProxy ๊ธฐ๊ธฐ์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ, digest, NTLM, Kerberos ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ์•”ํ˜ธ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ์ž ์ž๊ฒฉ์ฆ๋ช…์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WebProxy๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์ด ์˜ต์…˜์˜ ์‚ฌ์šฉ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ๊ทธ์™ธ์—๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


WebProxyUsername

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ƒ WebProxy ๊ธฐ๊ธฐ์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ, digest, NTLM, Kerberos ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž์ด๋ฆ„ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ์ž ์ž๊ฒฉ์ฆ๋ช…์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WebProxy๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์ด ์˜ต์…˜์˜ ์‚ฌ์šฉ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ๊ทธ์™ธ์—๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ด‡ ํ™˜๊ฒฝ์„ค์ •

๋‹น์‹ ์ด ์ด๋ฏธ ์•Œ๋‹ค์‹œํ”ผ, ๋ชจ๋“  ๋ด‡์€ ์ž์‹ ๋งŒ์˜ ์„ค์ •์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ธฐ๋ณธ์ด ๋˜๋Š” JSON๊ตฌ์กฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. 1.json, main.json, primary.json ๋˜๋Š” AnythingElse.json ๋“ฑ ๋ด‡์˜ ์ด๋ฆ„์„ ์ง“๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ํ™˜๊ฒฝ์„ค์ •์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

์ฃผ์˜: ๋ด‡์€ ASF๋กœ ๋ช…๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ASF๋Š” ์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ •์„ ์œ„ํ•œ ์˜ˆ์•ฝํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ (.)์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ด‡ ํ™˜๊ฒฝ์„ค์ •์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

{
    "AcceptGifts": false,
    "BotBehaviour": 0,
    "CompleteTypesToSend": [],
    "CustomGamePlayedWhileFarming": null,
    "CustomGamePlayedWhileIdle": null,
    "Enabled": false,
    "FarmingOrders": [],
    "FarmingPreferences": 0,
    "GamesPlayedWhileIdle": [],
    "GamingDeviceType": 1,
    "HoursUntilCardDrops": 3,
    "LootableTypes": [1, 3, 5],
    "MachineName": null,
    "MatchableTypes": [5],
    "OnlineFlags": 0,
    "OnlineStatus": 1,
    "PasswordFormat": 0,
    "RedeemingPreferences": 0,
    "RemoteCommunication": 3,
    "SendTradePeriod": 0,
    "SteamLogin": null,
    "SteamMasterClanID": 0,
    "SteamParentalCode": null,
    "SteamPassword": null,
    "SteamTradeToken": null,
    "SteamUserPermissions": {},
    "TradeCheckPeriod": 60,
    "TradingPreferences": 0,
    "TransferableTypes": [1, 3, 5],
    "UseLoginKeys": true,
    "UserInterfaceMode": 0,
    "WebProxy": null,
    "WebProxyPassword": null,
    "WebProxyUsername": null
}

๋ชจ๋“  ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

AcceptGifts

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์œผ๋ฉด ASF๋Š” ์ž๋™์œผ๋กœ ๋ด‡์œผ๋กœ ๋ณด๋‚ด์ง€๋Š” ๋ชจ๋“  Steam ์„ ๋ฌผ(์›”๋ › ๊ธฐํ”„ํŠธ์นด๋“œ ํฌํ•จ)์„ ์ˆ˜๋ฝํ•˜๊ณ  ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. SteamUserPermissions์—์„œ ์ •์˜๋œ ์‚ฌ์šฉ์ž ์ด์™ธ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ์„ ๋ฌผ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ๋ณด๋‚ธ ์„ ๋ฌผ์€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ASF๋Š” ๋‹น์‹ ์˜ ๋„์›€ ์—†์ด๋Š” ๊ทธ๊ฒƒ์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์€ ๋ถ€๊ณ„์ •์— ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฃผ ๊ณ„์ •์— ๋ชจ๋“  ์„ ๋ฌผ์„ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹์ง€ ๋ถˆํ™•์‹คํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ false๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


BotBehaviour

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ASF ๋ด‡์˜ ํ–‰๋™์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ ๋ด‡ ๋™์ž‘ ์—†์Œ, ๋ฌด๋‚œํ•œ ๊ธฐ๋ณธ ์„ค์ •
1 ์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidFriendInvites) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ ์ดˆ๋Œ€๋ฅผ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
2 ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ๊ฑฐ์ ˆ(RejectInvalidTrades) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
4 ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน ์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidGroupInvites) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
8 ๋ณด๊ด€ํ•จ ์•Œ๋ฆผ ํ•ด์ œ(DismissInventoryNotifications) ASF๊ฐ€ ๋ชจ๋“  ๋ณด๊ด€ํ•จ ์•Œ๋ฆผ์„ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
16 ๋ฐ›์€ ๋ฉ”์‹œ์ง€ ์ฝ์€์ƒํƒœ๋กœ ํ‘œ์‹œ(MarkReceivedMessagesAsRead) ASF๊ฐ€ ๋ชจ๋“  ๋„์ฐฉํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฝ์€ ์ƒํƒœ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
32 ๋ด‡ ๋ฉ”์‹œ์ง€ ์ฝ์€์ƒํƒœ๋กœ ํ‘œ์‹œ (MarkBotMessagesAsRead) ASF๊ฐ€ (๊ฐ™์€ ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰ ์ค‘์ธ) ๋‹ค๋ฅธ ASF ๋ด‡์œผ๋กœ๋ถ€ํ„ฐ ์˜จ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฝ์Œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
64 ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜ ํŒŒ์‹ฑ ๋น„ํ™œ์„ฑํ™” (DisableIncomingTradesParsing) ASF๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜ ์ œ์•ˆ(trade offer)์„ ์ ˆ๋Œ€ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด **json mapping**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ด‡ ํ™œ๋™๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์ž๋™ํ™” ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์ด ์†์„ฑ์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์€ ASF๊ฐ€ ๋น„์นจํ•ด์ (non-invasive) ๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์˜์‚ฌ์— ๋ฐ˜ํ•˜์ง€ ์•Š๋Š” ์œ ์ตํ•œ ์ž๋™ํ™”๋งŒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ ์ดˆ๋Œ€๋Š” SteamUserPermissions์— ์ •์˜๋œ ๊ฐ€์กฑ ๊ณต์œ (FamilySharing) ์ด์ƒ์˜ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์œผ๋กœ ๋ถ€ํ„ฐ ์˜จ ์นœ๊ตฌ ์ดˆ๋Œ€์ž…๋‹ˆ๋‹ค. ์˜ˆ์ƒํ•˜์‹œ๋Š” ๋Œ€๋กœ ๋ณดํ†ต ๋ชจ๋“œ์—์„œ ASF๋Š” ์ด ์ดˆ๋Œ€๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ด๋ฅผ ๋ฐ›์•„๋“ค์ผ์ง€ ๋ง์ง€ ์„ ํƒ๊ถŒ์„ ๋‹น์‹ ์—๊ฒŒ ์ค๋‹ˆ๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidFriendInvites)์€ ์ด๋Ÿฌํ•œ ์ดˆ๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ์ ์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ์„ ์นœ๊ตฌ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ์˜ต์…˜์„ ๋ง‰์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด SteamUserPermissions์— ์ •์˜ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๊ทธ๋Ÿฐ ์š”์ฒญ์„ ๋ชจ๋‘ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์นœ๊ตฌ ์ดˆ๋Œ€๋ฅผ ์™„์ „ํžˆ ๊ฑฐ๋ถ€ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ์€ ๋‚ด์žฅ๋œ ASF ๋ชจ๋“ˆ์—์„œ ์ˆ˜๋ฝ๋˜์ง€ ์•Š๋Š” ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜๋ฝํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฑฐ๋ž˜ ํ˜•์‹์˜ ๋ช…์‹œ์  ์ •์˜๋Š” ๊ฑฐ๋ž˜ ํ•ญ๋ชฉ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๊ฑฐ๋ž˜๋Š” ๋‹ค๋ฅธ ์„ค์ •, ํŠนํžˆ TradingPreferences์—๋„ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. RejectInvalidTrades๋Š” ๋ชจ๋“  ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ๋ฌด์‹œํ•˜๋Š” ๋Œ€์‹  ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ASF์—์„œ ์ž๋™์œผ๋กœ ์ˆ˜๋ฝํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ์™„์ „ํžˆ ๊ฑฐ๋ถ€ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™” ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน ์ดˆ๋Œ€๋Š” SteamMasterClanID ๊ทธ๋ฃน์ด ์•„๋‹Œ ๊ทธ๋ฃน์—์„œ ์˜จ ์ดˆ๋Œ€์ž…๋‹ˆ๋‹ค. ์˜ˆ์ƒํ•˜์‹œ๋Š”๋Œ€๋กœ ๋ณดํ†ต ๋ชจ๋“œ์—์„œ ASF๋Š” ์ด๋Ÿฌํ•œ ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ๋ฌด์‹œํ•˜๊ณ , ํŠน์ • Steam ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ• ์ง€ ๋ง์ง€๋ฅผ ์Šค์Šค๋กœ ์ •ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidGroupInvites)์€ ์ด๋Ÿฌํ•œ ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ๊ฑฐ์ ˆํ•˜๊ณ , SteamMasterClanID๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ทธ๋ฃน์ด ๋‹น์‹ ์„ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ์™„์ „ํžˆ ๊ฑฐ๋ถ€ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

DismissInventoryNotifications๋Š” ์ƒˆ ์•„์ดํ…œ ์ˆ˜์‹ ์— ๋Œ€ํ•œ Steam ์•Œ๋ฆผ์ด ๊ณ„์† ๋– ์„œ ๊ฑฐ์Šฌ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์•Œ๋ฆผ์€ Steam ํด๋ผ์ด์–ธํŠธ์— ๋‚ด์žฅ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ASF๊ฐ€ ์ด ์•Œ๋ฆผ์„ ์—†์•จ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์•Œ๋ฆผ์„ ๋ฐ›์€ ํ›„ ์ด๋ฅผ ์ž๋™์œผ๋กœ ํด๋ฆฌ์–ด ํ•  ์ˆ˜๋Š” ์žˆ์œผ๋ฉฐ, "์ƒˆ๋กœ์šด ๋ณด๊ด€ํ•จ ํ•ญ๋ชฉ" ์•Œ๋ฆผ์„ ๋†”๋‘์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ํ•œ ๋ชจ๋“  ์•„์ดํ…œ(ํŠนํžˆ ASF๋กœ ํŒŒ๋ฐํ•œ ์นด๋“œ)์„ ์ง์ ‘ ํ™•์ธํ•  ๊ณ„ํš์ด๋ผ๋ฉด, ๋‹น์—ฐํžˆ ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋ฏธ์ณ๊ฐ€๊ณ  ์žˆ๋‹ค๋ฉด ์ด ์˜ต์…˜์ด ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

MarkReceivedMessagesAsRead๋Š” ASF๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๊ณ„์ •์ด ์ˆ˜์‹ ํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€(๊ฐœ์ธ ๋ฐ ๊ทธ๋ฃน ์ฑ„ํŒ… ํฌํ•จ)๋ฅผ ์ž๋™์œผ๋กœ ์ฝ์Œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ณดํ†ต ๋ถ€๊ณ„์ •์—์„œ ASF ๋ช…๋ น์–ด ์ˆ˜ํ–‰์ค‘์— ์ž์‹ ์ด ๋ณด๋‚ธ "์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€"๋ฅผ ํด๋ฆฌ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์˜คํ”„๋ผ์ธ์ด์ง€๋งŒ ASF๋Š” ์—ฌ์ „ํžˆ ์•Œ๋ฆผ์„ ํ•ด์ œํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ์„ ์ž˜๋ผ๋‚ด๋ฒ„๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š๋Š” ํ•œ, ์ด ์˜ต์…˜์„ ์ฃผ ๊ณ„์ •์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

MarkBotMessagesAsRead๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋ด‡ ๋ฉ”์‹œ์ง€๋งŒ ์ฝ์Œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋ด‡๊ณผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ๊ป˜ ์žˆ๋Š” ๊ทธ๋ฃน ์ฑ„ํŒ…์—์„œ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, Steam์˜ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ํ™•์ธ(acknowledge) ๋ฐฉ์‹์€ ์ฝ์Œ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๋ฉ”์‹œ์ง€ ์ด์ „์— ๋ฐœ์ƒํ•œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ๋˜ํ•œ ํ•จ๊ป˜ ํ™•์ธ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋”ฐ๋ผ์„œ ๊ทธ ์‚ฌ์ด์— ๋ฐœ์ƒํ•œ ๊ด€๋ จ ์—†๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋†“์น˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ, ๊ฐ™์€ ASF ์ธ์Šคํ„ด์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฃผ ๊ณ„์ •(์˜ˆ: ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •)์„ ์šด์šฉ ์ค‘์ธ ๊ฒฝ์šฐ์—๋„ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ASF์™€ ๋ฌด๊ด€ํ•œ ์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

DisableIncomingTradesParsing๋Š” ASF๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ํŒŒ์‹ฑํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด์™€ ๊ด€๋ จ๋œ ๊ฑฐ๋ž˜ ๊ธฐ๋Šฅ ์ „์ฒด๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ ์นจํ•ด ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜์—ฌ Master ์ด์ƒ ๊ถŒํ•œ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ๊ฑฐ๋ž˜ ์ œ์•ˆ๋งŒ ์ˆ˜๋ฝํ•˜๊ณ  ๊ทธ ์™ธ์˜ ๊ฑฐ๋ž˜ ์ œ์•ˆ์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ๋”ฐ๋ผ์„œ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜ ํŒŒ์‹ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ๊ฑฐ๋ž˜ ํŒŒ์‹ฑ๊ณผ ๊ด€๋ จ๋œ ์ถ”๊ฐ€ ์š”์ฒญ/์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๊ด€๋ จ ๋กœ์ง ์ „์ฒด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์‹ ์˜ ๋ด‡์ด master๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ž˜ ์š”์ฒญ์„ ๋ฐ›์„ ์ผ์ด ์ „ํ˜€ ์—†์–ด์„œ ๊ฑฐ๋ž˜ ํ™œ๋™์— ASF๊ฐ€ ๊ด€์—ฌํ•  ํ•„์š”๊ฐ€ ์•„์˜ˆ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด AcceptDonations๋‚˜ SteamTradeMatcher์ฒ˜๋Ÿผ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์˜ต์…˜๋“ค๋„ ๋ชจ๋‘ ํ•จ๊ป˜ ๋น„ํ™œ์„ฑํ™”๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š” - ์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜ํ•œ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ํ‰์†Œ ๋ฐฉ์‹๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ํ™•์‹ค์น˜ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ตœ์„ ์ž…๋‹ˆ๋‹ค.


CompleteTypesToSend

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ASF๊ฐ€ ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•œ ์•„์ดํ…œ ํƒ€์ž…์˜ ์„ธํŠธ๋ฅผ ์™„์„ฑํ•˜๋ฉด, Master ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์™„์„ฑ๋œ ์„ธํŠธ ์ „์ฒด๋ฅผ Steam ๊ฑฐ๋ž˜๋กœ ์ž๋™ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ด๋‹น ๋ด‡ ๊ณ„์ •์„ STM ๋งค์นญ ์šฉ๋„๋กœ ํ™œ์šฉํ•˜๋ฉด์„œ ์™„์„ฑ๋œ ์„ธํŠธ๋Š” ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ loot ๋ช…๋ น์–ด์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Master ๊ถŒํ•œ์ด ์„ค์ •๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์œ ํšจํ•œ SteamTradeToken์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์• ์ดˆ์— ๊ฑฐ๋ž˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

ํ˜„์žฌ ์ด ์„ค์ •์—์„œ ์ง€์›๋˜๋Š” ์•„์ดํ…œ ํƒ€์ž…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
3 ์€๋ฐ• ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(FoilTradingCard) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard)์˜ ์€๋ฐ• ๋ฒ„์ „
5 ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard) Steam ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ. ๋ฐฐ์ง€ ์ œ์ž‘์— ์‚ฌ์šฉ. ์€๋ฐ• ์•„๋‹˜

์œ„ ์„ค์ •๊ณผ ๊ด€๊ณ„์—†์ด ASF๋Š” Steam ์ปค๋ฎค๋‹ˆํ‹ฐ ์•„์ดํ…œ(appID 753, contextID 6)๋งŒ ์š”์ฒญํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋”ฐ๋ผ์„œ ๊ฒŒ์ž„ ์•„์ดํ…œ, ์„ ๋ฌผ ๋“ฑ์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ ๋Œ€์ƒ์—์„œ ์›๋ž˜๋ถ€ํ„ฐ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์€ ์ถ”๊ฐ€์ ์ธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ์„ธํŠธ๋ฅผ ์Šค์Šค๋กœ ์™„์„ฑํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์‹ค์งˆ์ ์œผ๋กœ ์žˆ๋Š” ๋ด‡ ๊ณ„์ •์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค - ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋ฏธ FarmingPreferences์˜ SendOnFarmingFinished ์„ค์ •์ด๋‚˜ SendTradePeriod, ํ˜น์€ loot ๋ช…๋ น์–ด๋ฅผ ํ‰์†Œ์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ํ™•์‹ค์น˜ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ตœ์„ ์ž…๋‹ˆ๋‹ค.


CustomGamePlayedWhileFarming

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ๋†์‚ฌ๋ฅผ ์ง“๋Š” ๋™์•ˆ ํ˜„์žฌ ๋†์‚ฌ์ง“๋Š” ๊ฒŒ์ž„ ๋Œ€์‹  "CustomGamePlayedWhileFarming์„ ํ”Œ๋ ˆ์ด์ค‘"์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ž์‹ ์ด ๋†์‚ฌ๋ฅผ ์ง“๋Š” ์ค‘์ด๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ณ ๋Š” ์‹ถ์ง€๋งŒ ๊ธฐ๋ณธ OnlineStatus๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” Steam ๋„คํŠธ์›Œํฌ์˜ ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ, ํ˜น์€ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ASF๊ฐ€ 32๊ฐœ ์Šฌ๋กฏ์„ ๋ชจ๋‘ ์‹œ๊ฐ„ ๋ˆ„์ ์ด ํ•„์š”ํ•œ ๊ฒŒ์ž„์œผ๋กœ ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ, Complex ํŒŒ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ปค์Šคํ…€ ์ด๋ฆ„์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ null์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.

ASF๋Š” ํ…์ŠคํŠธ์— ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. {0}์€ ASF์— ์˜ํ•ด ํ˜„์žฌ ํŒŒ๋ฐ ์ค‘์ธ ๊ฒŒ์ž„์˜ AppID๋กœ ๋Œ€์ฒด๋˜๋ฉฐ, {1}์€ ํ˜„์žฌ ํŒŒ๋ฐ ์ค‘์ธ ๊ฒŒ์ž„์˜ GameName์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.


CustomGamePlayedWhileIdle

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. CustomGamePlayedWhileFarming์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋†์‚ฌ๊ฐ€ ๋๋‚œ ๊ณ„์ • ๋“ฑ ASF๊ฐ€ ํ•  ์ผ์ด ์—†์„ ๊ฒฝ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” Steam ๋„คํŠธ์›Œํฌ์˜ ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ, ํ˜น์€ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด ์˜ต์…˜๊ณผ ํ•จ๊ป˜ GamesPlayedWhileIdle์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, GamesPlayedWhileIdle์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋”ฐ๋ผ์„œ 31๊ฐœ๋ฅผ ์ดˆ๊ณผํ•ด์„œ ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด CustomGamePlayedWhileIdle์ด ์ปค์Šคํ…€ ์ด๋ฆ„์„ ์œ„ํ•œ ์Šฌ๋กฏ์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ null์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.


Enabled

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ด ๋ด‡์˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋œ ๋ด‡ ์ธ์Šคํ„ด์Šค(true)๋Š” ASF ์‹คํ–‰์‹œ์— ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ณ , ๋น„ํ™œ์„ฑ๋œ ๋ด‡ ์ธ์Šคํ„ด์Šค(false)๋Š” ์ˆ˜๋™์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ชจ๋“  ๋ด‡์ด ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•  ๋ชจ๋“  ๋ด‡์˜ ์ด ์†์„ฑ๊ฐ’์„ true๋กœ ๋ฐ”๊พธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


FarmingOrders

ImmutableList<byte> ํƒ€์ž…์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ ๋นˆ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ•ด๋‹น ๋ด‡ ๊ณ„์ •์—์„œ ASF๊ฐ€ ์‚ฌ์šฉํ•  ์„ ํ˜ธํ•˜๋Š” ๋†์‚ฌ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฐ€๋Šฅํ•œ ๋†์‚ฌ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์ˆœ์„œ ์—†์Œ(Unordered) ์ •๋ ฌํ•˜์ง€ ์•Š์Œ, CPU ์„ฑ๋Šฅ ์•ฝ๊ฐ„ ๊ฐœ์„ 
1 App ID ์˜ค๋ฆ„์ฐจ์ˆœ(AppIDsAscending) appID๊ฐ€ ์ž‘์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
2 App ID ๋‚ด๋ฆผ์ฐจ์ˆœ(AppIDsDescending) appID๊ฐ€ ํฐ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
3 ์นด๋“œ ๋“œ๋กญ ์˜ค๋ฆ„์ฐจ์ˆœ(CardDropsAscending) ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์นด๋“œ์˜ ์ˆ˜๊ฐ€ ์ ์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
4 ์นด๋“œ ๋“œ๋กญ ๋‚ด๋ฆผ์ฐจ์ˆœ(CardDropsDescending) ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์นด๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
5 ์‹œ๊ฐ„ ์˜ค๋ฆ„์ฐจ์ˆœ(HoursAscending) ํ”Œ๋ ˆ์ด ์‹œ๊ฐ„์ด ์ ์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
6 ์‹œ๊ฐ„ ๋‚ด๋ฆผ์ฐจ์ˆœ(HoursDescending) ํ”Œ๋ ˆ์ด ์‹œ๊ฐ„์ด ๋งŽ์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
7 ์ด๋ฆ„ ์˜ค๋ฆ„์ฐจ์ˆœ(NamesAscending) A๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ๋†์‚ฌ ์‹œ๋„
8 ์ด๋ฆ„ ๋‚ด๋ฆผ์ฐจ์ˆœ(NamesDescending) Z๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์—ญ์ˆœ์œผ๋กœ ๋†์‚ฌ ์‹œ๋„
9 ๋ฌด์ž‘์œ„(Random) ์™„์ „ํžˆ ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋กœ ๋†์‚ฌ ์‹œ๋„(ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ๋งˆ๋‹ค ๋ณ€๊ฒฝ)
10 ๋ฐฐ์ง€ ๋ ˆ๋ฒจ ์˜ค๋ฆ„์ฐจ์ˆœ(BadgeLevelsAscending) ๋ฐฐ์ง€ ๋ ˆ๋ฒจ์ด ๋‚ฎ์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
11 ๋ฐฐ์ง€ ๋ ˆ๋ฒจ ๋‚ด๋ฆผ์ฐจ์ˆœ(BadgeLevelsDescending) ๋ฐฐ์ง€ ๋ ˆ๋ฒจ์ด ๋†’์€ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
12 ๋“ฑ๋ก ๋‚ ์งœ ์‹œ๊ฐ„ ์˜ค๋ฆ„์ฐจ์ˆœ(RedeemDateTimesAscending) ๊ณ„์ • ๋“ฑ๋ก์ด ์˜ค๋ž˜๋œ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
13 ๋“ฑ๋ก ๋‚ ์งœ ์‹œ๊ฐ„ ๋‚ด๋ฆผ์ฐจ์ˆœ(RedeemDateTimesDescending) ๊ณ„์ • ๋“ฑ๋ก์ด ์ตœ๊ทผ์ธ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
14 ์žฅํ„ฐํ™” ์˜ค๋ฆ„์ฐจ์ˆœ(MarketableAscending) ํŒ๋งค ๋ถˆ๊ฐ€๋Šฅํ•œ(unmarketable) ์นด๋“œ ๋“œ๋กญ์ด ์žˆ๋Š” ๊ฒŒ์ž„์„ ์šฐ์„  ํŒŒ๋ฐ ์‹œ๋„ (๊ฒฝ๊ณ : ๊ณ„์‚ฐ ๋น„์šฉ์ด ํผ)
15 ์žฅํ„ฐํ™” ๋‚ด๋ฆผ์ฐจ์ˆœ(MarketableDescending) ํŒ๋งค ๊ฐ€๋Šฅํ•œ(marketable) ์นด๋“œ ๋“œ๋กญ์ด ์žˆ๋Š” ๊ฒŒ์ž„์„ ์šฐ์„  ํŒŒ๋ฐ ์‹œ๋„ (๊ฒฝ๊ณ : ๊ณ„์‚ฐ ๋น„์šฉ์ด ํผ)

์ด ์†์„ฑ๊ฐ’์€ ๋ฐฐ์—ด์ด๋ฏ€๋กœ ๊ณ ์ •๋œ ์ˆœ์„œ๋ฅผ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์นด๋“œ ํŒ๋งค๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ๋จผ์ €, ๋ฐฐ์ง€ ๋ ˆ๋ฒจ์ด ๋†’์€ ๊ฒŒ์ž„์„ ๊ทธ ๋‹ค์Œ์—, ๋งˆ์ง€๋ง‰์œผ๋กœ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๊ณ  15, 11, ๊ทธ๋ฆฌ๊ณ  7 ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ž‘ํ•˜์‹œ๋‹ค์‹œํ”ผ, ์ˆœ์„œ๋Š” ์‹ค์ œ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ํ•˜๋ฉด(7, 11, 15) ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๊ฒŒ์ž„ ์ด๋ฆ„์„ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ๋จผ์ € ์ •๋ ฌํ•˜๊ฒŒ ๋˜๋ฉฐ, ๊ฒŒ์ž„ ์ด๋ฆ„์ด ๊ณ ์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ ๋‘ ๊ธฐ์ค€์€ ์‚ฌ์‹ค์ƒ ๋ฌด์˜๋ฏธํ•ด์ง‘๋‹ˆ๋‹ค). ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ํ•œ ๊ฐ€์ง€ ์ˆœ์„œ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์›ํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋” ๊นŠ์ด์žˆ๊ฒŒ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์„ค๋ช…์— ์žˆ๋Š” "์‹œ๋„"๋ผ๋Š” ๋‹จ์–ด์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ ASF์˜ ์ˆœ์„œ๋Š” ์„ ํƒํ•œ **์นด๋“œ ๋†์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**์— ์‹ฌํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ์ •๋ ฌ๋ฐฉ์‹์€ ๋™์ผํ•œ ์„ฑ๋Šฅ์ธก๋ฉด์„ ๊ณ ๋ คํ•œ ๊ฒฝ์šฐ์—๋งŒ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Simple ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” (๋ชจ๋“  ๊ฒŒ์ž„์ด ๋™์ผํ•œ ์„ฑ๋Šฅ ๊ฐ’์„ ๊ฐ€์ง€๋ฏ€๋กœ) ์„ ํƒํ•œ FarmingOrders๊ฐ€ ํ˜„์žฌ ํŒŒ๋ฐ ์„ธ์…˜์—์„œ ์™„์ „ํžˆ ์กด์ค‘๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Complex ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์‹ค์ œ ์ˆœ์„œ๊ฐ€ ๋จผ์ € ์‹œ๊ฐ„(hours)์˜ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋‹ค์Œ, ์„ ํƒํ•œ FarmingOrders์— ๋”ฐ๋ผ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋กœ ์ด์–ด์ง€๋Š”๋ฐ, ๊ธฐ์กด์— ํ”Œ๋ ˆ์ดํƒ€์ž„์ด ์žˆ๋Š” ๊ฒŒ์ž„์ด ๋‹ค๋ฅธ ๊ฒŒ์ž„๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์งˆ์ ์œผ๋กœ ASF๋Š” ํ•„์š”ํ•œ HoursUntilCardDrops๋ฅผ ์ด๋ฏธ ์ถฉ์กฑํ•œ ๊ฒŒ์ž„์„ ์šฐ์„ ์ ์œผ๋กœ ์„ ํ˜ธํ•˜๋ฉฐ, ๊ทธ ๋‹ค์Œ์—์•ผ ์„ ํƒํ•œ FarmingOrders์— ๋”ฐ๋ผ ํ•ด๋‹น ๊ฒŒ์ž„๋“ค์„ ์ถ”๊ฐ€๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด๋ฏธ bump๋œ ๊ฒŒ์ž„๋“ค์ด ์†Œ์ง„๋˜๋ฉด ASF๋Š” ๋‚จ์€ ๋Œ€๊ธฐ์—ด์„ ์‹œ๊ฐ„(hours) ๊ธฐ์ค€์œผ๋กœ ๋จผ์ € ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค(์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚จ์€ ํƒ€์ดํ‹€๋“ค์„ HoursUntilCardDrops๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ์ด ์„ค์ • ์†์„ฑ์€ ์–ด๋””๊นŒ์ง€๋‚˜ ASF๊ฐ€ ์กด์ค‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” **์ œ์•ˆ(suggestion)**์ผ ๋ฟ์ด๋ฉฐ, ์ด๋Š” ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ํ•œ์—์„œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ASF๋Š” ํ•ญ์ƒ FarmingOrders๋ณด๋‹ค ํŒŒ๋ฐ ์„ฑ๋Šฅ์„ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค).

๋˜ํ•œ fq **๋ช…๋ น์–ด**๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ๋ฐ ์šฐ์„ ์ˆœ์œ„ ๋Œ€๊ธฐ์—ด(farming priority queue)๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์‹ค์ œ ํŒŒ๋ฐ ์ˆœ์„œ๋Š” ๋จผ์ € ์„ฑ๋Šฅ(performance)์œผ๋กœ, ๊ทธ ๋‹ค์Œ ํŒŒ๋ฐ ๋Œ€๊ธฐ์—ด(farming queue)๋กœ, ๋งˆ์ง€๋ง‰์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ์„ค์ •ํ•œ FarmingOrders๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.


FarmingPreferences

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํŒŒ๋ฐ๊ณผ ๊ด€๋ จ๋œ ASF์˜ ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„
0 ์—†์Œ(None)
1 FarmingPausedByDefault
2 ShutdownOnFarmingFinished
4 SendOnFarmingFinished
8 FarmPriorityQueueOnly
16 SkipRefundableGames
32 SkipUnplayedGames
64 EnableRiskyCardsDiscovery
256 AutoUnpackBoosterPacks

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด **JSON ๋งคํ•‘**์„ ํ™•์ธํ•ด๋ณด์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜ต์…˜์€ ์•„๋ž˜์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

FarmingPausedByDefault๋Š” CardsFarmer ๋ชจ๋“ˆ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ด‡์€ Enabled ์„ค์ •์ด๋‚˜ start ๋ช…๋ น์–ด๋กœ ์ธํ•ด ์‹œ์ž‘๋  ๋•Œ ์ž๋™์œผ๋กœ ํŒŒ๋ฐ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. FarmingPausedByDefault๋Š” ์ž๋™ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ resumeํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ์ƒ play๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ž๋™ CardsFarmer ๋ชจ๋“ˆ์€ ์ „ํ˜€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค โ€“ ์ด๋Š” pause **๋ช…๋ น์–ด**์™€ ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ShutdownOnFarmingFinished๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ๋ฐ์ด ๋๋‚ฌ์„ ๋•Œ ๋ด‡์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” ๋™์•ˆ ๊ณ„์†ํ•ด์„œ ๊ณ„์ •์„ "์ ์œ "ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ณ„์ •์˜ ๋†์‚ฌ๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด, ASF๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋งค IdleFarmingPeriod ์‹œ๊ฐ„๋งˆ๋‹ค Steam ์นด๋“œ๊ฐ€ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ฒŒ์ž„์ด ๊ทธ ์‚ฌ์ด์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•  ํ•„์š”์—†์ด ๋†์‚ฌ๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์œ ์šฉํ•œ๋ฐ, ASF๋Š” ํ•„์š”ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋†์‚ฌ๋ฅผ ์ด์–ด์„œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๊ณ„์ •์˜ ํŒŒ๋ฐ์ด ๋ชจ๋‘ ๋๋‚ฌ์„ ๋•Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€์‹œํ‚ค๊ณ  ์‹ถ์œผ์‹ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑํ™”๋˜๋ฉด ASF๋Š” ๊ณ„์ •์˜ ๋†์‚ฌ๊ฐ€ ์™„์ „ํžˆ ๋๋‚˜๋ฉด ๋กœ๊ทธ์˜คํ”„ํ•˜์—ฌ ๋”์ด์ƒ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌํ•˜๊ฑฐ๋‚˜ ์ ์œ ํ•˜์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ASF๊ฐ€ ๋ชจ๋“  ์‹œ๊ฐ„์„ ๋ด‡ ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜, ํ˜น์€ ๋†์‚ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๋ฉด ๋ฉˆ์ถ”๊ฒŒ ํ• ์ง€๋ฅผ ์Šค์Šค๋กœ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์€ ShutdownIfPossible๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ณ„์ •์ด ์ •์ง€๋˜์—ˆ์„ ๋•Œ ASF๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜์–ด ๊ธฐ๊ธฐ๋ฅผ ์œ ํœด ์ƒํƒœ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๋งˆ์ง€๋ง‰ ์นด๋“œ๊ฐ€ ๋“œ๋กญ๋˜๋Š” ์‹œ์ ์— ๋งž์ถฐ ์ ˆ์ „ ๋ชจ๋“œ๋‚˜ ์ข…๋ฃŒ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์˜ˆ์•ฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

SendOnFarmingFinished๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ทธ ์‹œ์ ๊นŒ์ง€ ํŒŒ๋ฐํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ด์€ Steam ๊ฑฐ๋ž˜๋ฅผ Master ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž๋™์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด, ์ง์ ‘ ๊ฑฐ๋ž˜๋ฅผ ์‹ ๊ฒฝ ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ loot ๋ช…๋ น์–ด์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฏ€๋กœ, Master ๊ถŒํ•œ์ด ์„ค์ •๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”. ๋˜ํ•œ ์œ ํšจํ•œ SteamTradeToken์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์• ์ดˆ์— ๊ฑฐ๋ž˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์ด ์ผœ์ ธ์žˆ๋‹ค๋ฉด ๋†์‚ฌ ํ›„ ๋ฃจํŒ…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜, ASF๋Š” ๊ฑฐ๋ž˜๋กœ ์ƒ๊ธฐ๋Š” ์ƒˆ๋กœ์šด ์•„์ดํ…œ์˜ ์•Œ๋ฆผ๋„ ๋ฃจํŒ…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์šฐ๋ฆฌ ๊ณ„์ •์— ๋ณด๋‚ธ ์•„์ดํ…œ์„ "์ „๋‹ฌ"ํ•˜๋Š”๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ **ASF 2FA**๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ, 2FA ํ™•์ธ์„ ์ œ๋•Œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ๊ณ„ํš์ด๋ผ๋ฉด ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

FarmPriorityQueueOnly๋Š” fq **๋ช…๋ น์–ด**๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์šฐ์„ ์ˆœ์œ„ ํŒŒ๋ฐ ๋Œ€๊ธฐ์—ด์— ์ง์ ‘ ์ถ”๊ฐ€ํ•œ ์•ฑ๋งŒ ์ž๋™ ํŒŒ๋ฐ ๋Œ€์ƒ์œผ๋กœ ๊ณ ๋ คํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, ASF๋Š” ๋ชฉ๋ก์— ์—†๋Š” ๋ชจ๋“  appIDs๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž๋™ ASF ํŒŒ๋ฐ ๋Œ€์ƒ ๊ฒŒ์ž„์„ ์ง์ ‘ ์„ ๋ณ„(cherry-pick)ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์— ๊ฒŒ์ž„์„ ํ•˜๋‚˜๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ASF๋Š” ํ•ด๋‹น ๊ณ„์ •์— ํŒŒ๋ฐํ•  ๊ฒƒ์ด ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”.

SkipRefundableGames๋Š” ์•„์ง ํ™˜๋ถˆ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ์ž๋™ ํŒŒ๋ฐ์—์„œ ๊ฑด๋„ˆ๋›ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๋ถˆ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์€ Steam ํ™˜๋ถˆ ํŽ˜์ด์ง€์— ๊ฒŒ์‹œ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ Steam ์ƒ์ ์—์„œ ๊ตฌ๋งคํ•œ์ง€ 2์ฃผ ์ด๋‚ด์ด๊ณ  2์‹œ๊ฐ„์„ ๋„˜์ง€์•Š๊ฒŒ ํ”Œ๋ ˆ์ดํ•œ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ASF๋Š” Steam ํ™˜๋ถˆ ์ •์ฑ…์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ๋ฐํ•˜๋ฉฐ, ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ™˜๋ถˆ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ASF๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ํŒŒ๋ฐํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ASF๊ฐ€ ํ”Œ๋ ˆ์ดํƒ€์ž„์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ค„๊นŒ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ , ์ง์ ‘ ํ•ด๋‹น ๊ฒŒ์ž„๋“ค์„ ํ‰๊ฐ€ํ•œ ๋’ค ํ•„์š”ํ•˜๋‹ค๋ฉด ํ™˜๋ถˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, Steam ์Šคํ† ์–ด์—์„œ ๊ตฌ๋งคํ•œ ๊ฒŒ์ž„์€ redeem(๊ตฌ๋งค ๋“ฑ๋ก) ๋‚ ์งœ๋กœ๋ถ€ํ„ฐ ์ตœ๋Œ€ 14์ผ ๋™์•ˆ ASF์— ์˜ํ•ด ํŒŒ๋ฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”. ๊ณ„์ •์— ๋‹ค๋ฅธ ๊ฒŒ์ž„์ด ์—†๋‹ค๋ฉด ์ด๋Š” ํŒŒ๋ฐํ•  ๊ฒƒ์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

SkipUnplayedGames๋Š” ์•„์ง ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒŒ์ž„์„ ASF๊ฐ€ ๊ฑด๋„ˆ๋›ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” "ํ”Œ๋ ˆ์ดํ•˜์ง€ ์•Š์€ ๊ฒŒ์ž„"์ด๋ž€ Steam์— ๊ธฐ๋ก๋œ ํ”Œ๋ ˆ์ดํƒ€์ž„์ด ์ •ํ™•ํžˆ 0์ธ ๊ฒŒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, Steam์— ํ•ด๋‹น ๊ฒŒ์ž„์˜ ํ”Œ๋ ˆ์ดํƒ€์ž„์ด ์กฐ๊ธˆ์ด๋ผ๋„ ๊ธฐ๋ก๋  ๋•Œ๊นŒ์ง€๋Š” ์ด๋Ÿฌํ•œ ๊ฒŒ์ž„๋“ค์ด ๊ฑด๋„ˆ๋›ฐ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ASF๊ฐ€ ํŒŒ๋ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํ”Œ๋ ˆ์ดํ•ด๋ณผ ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ๋˜ ๊ฒŒ์ž„์€ ๊ฑด๋„ˆ๋›ฐ์–ด, ํ”Œ๋ ˆ์ดํ•˜์ง€ ์•Š์€ ๊ฒŒ์ž„์„ ์ถ”์ฒœํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ํŠน์ • Steam ๊ธฐ๋Šฅ์ด ๊ณ„์† ์œ ์šฉํ•˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

EnableRiskyCardsDiscovery๋Š” ASF๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜์ง€ ๋ชปํ•ด ํŒŒ๋ฐ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ํด๋ฐฑ(fallback)์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์นด๋“œ ๋“œ๋กญ ์–‘์ด ๋งค์šฐ ๋งŽ์€ ์ผ๋ถ€ ๊ณ„์ •์˜ ๊ฒฝ์šฐ, (์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด) ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ๋” ์ด์ƒ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ณ„์ •์€ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ๊ทผ๊ฑฐ๊ฐ€ ๋˜๋Š” ์ •๋ณด๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ˆœํ•œ ์ด์œ ๋งŒ์œผ๋กœ ํŒŒ๋ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทน์†Œ์ˆ˜์˜ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด, ์ด ์˜ต์…˜์€ ๋Œ€์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ œ์ž‘ ๊ฐ€๋Šฅํ•œ ๋ถ€์Šคํ„ฐ์™€ ํ•ด๋‹น ๊ณ„์ •์ด ๋ฐ›์„ ์ž๊ฒฉ์ด ์žˆ๋Š” ๋ถ€์Šคํ„ฐ ํŒฉ์„ ์กฐํ•ฉํ•˜์—ฌ idle ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ์ฐพ์•„๋‚ธ ๋‹ค์Œ, ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•˜๋ฉฐ, ์ œํ•œ๋œ ๋ฐ์ดํ„ฐ์™€ ์ •๋ณด๋งŒ์œผ๋กœ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋ ค ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ ๋ฐฐ์ง€ ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋“œ๋˜์–ด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํด๋ฐฑ(fallback)์ด ์‚ฌ์šฉ๋  ๋•Œ๋Š” ASF๊ฐ€ ์ œํ•œ๋œ ๋ฐ์ดํ„ฐ๋งŒ์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ, ์‹ค์ œ๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ๋“œ๋กญ๋งŒ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ์ •์ƒ์ด๋ผ๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š” โ€“ ๋‚˜๋จธ์ง€ ๋“œ๋กญ๋“ค์€ ํŒŒ๋ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ดํ›„ ๋‹จ๊ณ„์—์„œ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์ด "์œ„ํ—˜"ํ•˜๋‹ค๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฐ์—๋Š” ๊ทธ๋Ÿด ๋งŒํ•œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค โ€“ ์ž‘๋™์„ ์œ„ํ•ด ๋งค์šฐ ๋А๋ฆฌ๊ณ  ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฆฌ์†Œ์Šค(๋„คํŠธ์›Œํฌ ์š”์ฒญ ํฌํ•จ)๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ, ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํŠนํžˆ ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ณ„์ •์ด ๋ฐฐ์ง€ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜์ง€ ๋ชปํ•ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๊ณ , ASF๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํ•ญ์ƒ ๋กœ๋“œํ•˜์ง€ ๋ชปํ•ด ํ•ด๋‹น ๊ณ„์ •์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ํ™•์ธํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ–ˆ๋”๋ผ๋„, ์ด ์˜ต์…˜์ด ์—ญํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์€ ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋ฉฐ, ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ Steam ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚ด์œผ๋กœ์จ Steam ์ธก์˜ ์ผ์‹œ์ ์ธ, ํ˜น์€ ์‹ฌ์ง€์–ด ์˜๊ตฌ์ ์ธ ์ฐจ๋‹จ๊ณผ ๊ฐ™์€ ์›์น˜ ์•Š๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฏธ๋ฆฌ ๊ฒฝ๊ณ ๋“œ๋ฆฌ๋ฉฐ, ์ด ์˜ต์…˜์€ ๊ทธ ์–ด๋–ค ๋ณด์ฆ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์€ ์ „์ ์œผ๋กœ ๋ณธ์ธ์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.

AutoUnpackBoosterPacks๋Š” ์ƒˆ ์•„์ดํ…œ ์ˆ˜์‹  ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ์ฆ‰์‹œ ๋ชจ๋“  ๋ถ€์Šคํ„ฐ ํŒฉ์„ ์ž๋™์œผ๋กœ ๊ฐœ๋ด‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€ ์นด๋“œ ๋“œ๋กญ์„ ์ฆ‰์‹œ ํš๋“ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ SteamTradeMatcher๋‚˜ CompleteTypesToSend์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์œ ์šฉํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


GamesPlayedWhileIdle

ImmutableHashSet<uint> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ASF๊ฐ€ ๋†์‚ฌ์ง€์„ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ๋Œ€์‹  ํŠน์ • ๊ฒŒ์ž„(appIDs)์„ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ”Œ๋ ˆ์ดํ•˜๋ฉด "ํ”Œ๋ ˆ์ดํ•œ ์‹œ๊ฐ„"์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒŒ ๋์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด, ์‚ฌ์šฉ์ž์˜ Steam ๊ณ„์ •์ด ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•œ ๋ชจ๋“  appID์— ๋Œ€ํ•œ ์œ ํšจํ•œ ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ณด์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” F2P ๊ฒŒ์ž„๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ Steam ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ์ž์ •์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด์„œ ์„ ํƒํ•œ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•˜๊ธฐ ์œ„ํ•ด CustomGamePlayedWhileIdle์™€ ๋™์‹œ์— ํ™œ์„ฑํ™” ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ CustomGamePlayedWhileFarming์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Steam์€ ASF๊ฐ€ ์ด 32๊ฐœ์˜ appIDs๋ฅผ ํ”Œ๋ ˆ์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๋ฝํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ๊ฐ’์— ๊ทธ๋งŒํผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


GamingDeviceType

ushort ํƒ€์ž…์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ Steam ํ”Œ๋žซํผ์—์„œ ์ผ๋ถ€ ์ถ”๊ฐ€์ ์ธ ์˜จ๋ผ์ธ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
1 StandardPC ํŠน๋ณ„ํ•œ ๋ชจ๋“œ ์—†์Œ, ๊ธฐ๋ณธ๊ฐ’
544 SteamDeck Steam Deck์œผ๋กœ ํ‘œ์‹œ

์ด ์†์„ฑ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” EGamingDeviceType ํƒ€์ž…์—๋Š” ๋” ๋งŽ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด ์žˆ์ง€๋งŒ, ์ €ํฌ๊ฐ€ ์•„๋Š” ํ•œ ์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ๋Š” ์ „ํ˜€ ํšจ๊ณผ๊ฐ€ ์—†์–ด์„œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 1์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.


HoursUntilCardDrops

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 3์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ด ๊ณ„์ •์— ์นด๋“œ ํš๋“ ์ œํ•œ์ด ์žˆ๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋งŒ์•ฝ ์ œํ•œ์ด ์žˆ๋‹ค๋ฉด ์ตœ์ดˆ ๋ช‡์‹œ๊ฐ„์ธ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์นด๋“œ ํš๋“ ์ œํ•œ์ด๋ž€, ๊ทธ ๊ณ„์ •์—์„œ ํ•œ ๊ฒŒ์ž„์„ ์ ์–ด๋„ HoursUntilCardDrops ์‹œ๊ฐ„ ๋™์•ˆ ํ”Œ๋ ˆ์ดํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๊ฒŒ์ž„์˜ ์นด๋“œ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ ์ด๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋งˆ๋ฒ•์€ ์—†์œผ๋ฏ€๋กœ ASF๋Š” ๋‹น์‹ ์—๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์‚ฌ์šฉํ•  ์นด๋“œ ๋†์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ์ด๋“์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ์นด๋“œ๋†์‚ฌ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฐ’์„ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •๋‹ต์€ ์—†๊ณ , ์˜ค๋กœ์ง€ ์ž์‹ ์˜ ๊ณ„์ •์— ๋‹ฌ๋ ค์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ํ™˜๋ถˆ์„ ํ•œ๋ฒˆ๋„ ํ•˜์ง€ ์•Š์€ ์˜ค๋ž˜๋œ ๊ณ„์ •์€ ์ œํ•œ์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ 0 ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ณ„์ •๊ณผ ํ™˜๋ถˆ์„ ๋ฐ›์•˜๋˜ ๊ณ„์ •์€ ํš๋“ ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ 3 ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋‹จ์ง€ ์ด๋ก ์ผ ๋ฟ์ด๊ณ  ๊ทœ์น™์œผ๋กœ ๋ฐ›์•„๋“ค์—ฌ์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์˜ ๊ธฐ๋ณธ๊ฐ’์€ "์†Œ์•…(lesser evil)"๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ๋ก€์— ๊ทผ๊ฑฐํ•ด ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


LootableTypes

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1, 3, 5 Steam ์•„์ดํ…œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ lootํ•  ๋•Œ์˜ ASF ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค โ€“ **๋ช…๋ น์–ด**๋ฅผ ์‚ฌ์šฉํ•œ ์ˆ˜๋™ loot์™€, ํ•˜๋‚˜ ์ด์ƒ์˜ ์„ค์ • ์†์„ฑ์„ ํ†ตํ•œ ์ž๋™ loot ๋ชจ๋‘์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ASF๋Š” LootableTypes์— ์žˆ๋Š” ์•„์ดํ…œ๋งŒ ๊ฑฐ๋ž˜ ์ œ์•ˆ์— ํฌํ•จํ•  ๊ฒƒ์ด๋ฏ€๋กœ, ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์—๊ฒŒ ๋ณด๋‚ด์ง„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์—์„œ ๋ฌด์—‡์„ ๋ฐ›์„์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์•„๋ž˜์˜ ์–ด๋А๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํƒ€์ž…
1 ๋ถ€์Šคํ„ฐ ํŒฉ(BoosterPack) ํ•œ ๊ฒŒ์ž„์˜ ๋ฌด์ž‘์œ„ ์นด๋“œ 3์žฅ์ด ๋“ค์–ด์žˆ๋Š” ๋ถ€์Šคํ„ฐ ํŒฉ
2 ์ด๋ชจํ‹ฐ์ฝ˜(Emoticon) Steam ๋Œ€ํ™”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜
3 ์€๋ฐ• ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(FoilTradingCard) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard)์˜ ์€๋ฐ• ๋ฒ„์ „
4 ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ(ProfileBackground) Steam ํ”„๋กœํ•„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ
5 ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard) Steam ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ. ๋ฐฐ์ง€ ์ œ์ž‘์— ์‚ฌ์šฉ. ์€๋ฐ• ์•„๋‹˜
6 Steam ๋ณด์„(SteamGems) ๋ถ€์Šคํ„ฐ ํŒฉ ์ œ์ž‘์— ์‚ฌ์šฉ๋˜๋Š” Steam ๋ณด์„. ๋ณด์„ ๋”๋ฏธ ํฌํ•จ
7 ํŒ๋งค ์•„์ดํ…œ(SaleItem) Steam ํ• ์ธ๊ธฐ๊ฐ„๋™์•ˆ ํš๋“ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
8 ์†Œ๋ชจํ’ˆ(Consumable) ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ํŠน๋ณ„ํ•œ ์†Œ๋ชจ ์•„์ดํ…œ
9 ํ”„๋กœํ•„ ์ˆ˜์ •(ProfileModifier) Steam ํ”„๋กœํ•„ ๋ชจ์–‘์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
10 Sticker Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
11 ChatEffect Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
12 MiniProfileBackground Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ๋ฐฐ๊ฒฝํ™”๋ฉด
13 ์•„๋ฐ”ํƒ€ ์•ก์ž(AvatarProfileFrame) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์•„๋ฐ”ํƒ€ ์•ก์ž
14 ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€(AnimatedAvatar) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€
15 KeyboardSkin Steam Deck์šฉ ํŠน์ˆ˜ ํ‚ค๋ณด๋“œ ์Šคํ‚จ
16 StartupVideo Steam Deck์šฉ ํŠน์ˆ˜ ๋ถ€ํŒ… ์˜์ƒ

์œ„ ์„ค์ •๊ณผ ๊ด€๊ณ„์—†์ด ASF๋Š” Steam ์ปค๋ฎค๋‹ˆํ‹ฐ ์•„์ดํ…œ(appID 753, contextID 6)๋งŒ ์š”์ฒญํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋”ฐ๋ผ์„œ ๊ฒŒ์ž„ ์•„์ดํ…œ, ์„ ๋ฌผ ๋“ฑ์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ ๋Œ€์ƒ์—์„œ ์›๋ž˜๋ถ€ํ„ฐ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

ASF์˜ ๊ธฐ๋ณธ ์„ค์ •์€ ๋ด‡์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ๋ฐฉ์‹์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉฐ, ๋ถ€์Šคํ„ฐ ํŒฉ๊ณผ (foil ํฌํ•จ) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ๋งŒ์„ loot ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ •์˜๋œ ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์„ ๋งŒ์กฑ์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ์–ด๋–ป๊ฒŒ๋“  ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํƒ€์ž…์€ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œ๋จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. Valve๊ฐ€ ์ƒˆ๋กœ์šด Steam ์•„์ดํ…œ์„ ๋‚ด๋†“์•˜์„๋•Œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ, ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ASF์—์„œ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ๋งŒ์•ฝ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ๊นจ์ ธ์„œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด ASF๋Š” ์ „์ฒด ๋ณด๊ด€ํ•จ์„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์œผ๋กœ ๋ณด๋‚ผ๊ฒƒ์ด๋ผ๋Š” ์ ๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€์•Š๋Š” ํ•œ, ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ LootableTypes์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ loot ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์‹ถ๋”๋ผ๋„, LootableTypes์— Unknown ํƒ€์ž…์€ ํฌํ•จํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


MachineName

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF๋Š” Steam ๋„คํŠธ์›Œํฌ์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์ด ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด **์—ฌ๊ธฐ**์ฒ˜๋Ÿผ ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ๊ธฐ๊ธฐ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•  ๋•Œ Steam์ด ASF ๊ธฐ๊ธฐ์™€ ์„ธ์…˜์„ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€ ์‚ฌ์šฉ์žํ™”ํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ASF๋Š” ํ…์ŠคํŠธ์— ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. {0}์€ OS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๊ธฐ ์ด๋ฆ„์œผ๋กœ, {1}์€ ASF์˜ ๊ณต๊ฐœ ์‹๋ณ„์ž๋กœ, {2}๋Š” ASF์˜ ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ null์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ASF๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ ์ ˆํ•œ ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋ฉฐ, ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ๋Š” {0} ({1}/{2}) ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ ์ œ์•ˆ์ผ ๋ฟ์ด๋ฉฐ, Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ์ด๋ฅผ ์™„์ „ํžˆ ๋ฐ˜์˜ํ•  ์ˆ˜๋„, ๋ฐ˜์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.


MatchableTypes

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 5 Steam ์•„์ดํ…œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ TradingPreferences์˜ SteamTradeMatcher ์˜ต์…˜์ด ํ™œ์„ฑํ™” ๋˜์—ˆ์„ ๋•Œ ๋งค์นญ์„ ํ—ˆ๋ฝํ•  Steam ์•„์ดํ…œ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์•„๋ž˜์˜ ์–ด๋А๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํƒ€์ž…
1 ๋ถ€์Šคํ„ฐ ํŒฉ(BoosterPack) ํ•œ ๊ฒŒ์ž„์˜ ๋ฌด์ž‘์œ„ ์นด๋“œ 3์žฅ์ด ๋“ค์–ด์žˆ๋Š” ๋ถ€์Šคํ„ฐ ํŒฉ
2 ์ด๋ชจํ‹ฐ์ฝ˜(Emoticon) Steam ๋Œ€ํ™”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜
3 ์€๋ฐ• ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(FoilTradingCard) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard)์˜ ์€๋ฐ• ๋ฒ„์ „
4 ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ(ProfileBackground) Steam ํ”„๋กœํ•„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ
5 ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard) Steam ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ. ๋ฐฐ์ง€ ์ œ์ž‘์— ์‚ฌ์šฉ. ์€๋ฐ• ์•„๋‹˜
6 Steam ๋ณด์„(SteamGems) ๋ถ€์Šคํ„ฐ ํŒฉ ์ œ์ž‘์— ์‚ฌ์šฉ๋˜๋Š” Steam ๋ณด์„. ๋ณด์„ ๋”๋ฏธ ํฌํ•จ
7 ํŒ๋งค ์•„์ดํ…œ(SaleItem) Steam ํ• ์ธ๊ธฐ๊ฐ„๋™์•ˆ ํš๋“ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
8 ์†Œ๋ชจํ’ˆ(Consumable) ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ํŠน๋ณ„ํ•œ ์†Œ๋ชจ ์•„์ดํ…œ
9 ํ”„๋กœํ•„ ์ˆ˜์ •(ProfileModifier) Steam ํ”„๋กœํ•„ ๋ชจ์–‘์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
10 ์Šคํ‹ฐ์ปค(Sticker) Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
11 ์ฑ„ํŒ… ํšจ๊ณผ(ChatEffect) Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
12 ๋ฏธ๋‹ˆ ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ(MiniProfileBackground) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ๋ฐฐ๊ฒฝํ™”๋ฉด
13 ์•„๋ฐ”ํƒ€ ์•ก์ž(AvatarProfileFrame) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์•„๋ฐ”ํƒ€ ์•ก์ž
14 ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€(AnimatedAvatar) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€
15 ํ‚ค๋ณด๋“œ ์Šคํ‚จ(KeyboardSkin) Steam Deck์šฉ ํŠน์ˆ˜ ํ‚ค๋ณด๋“œ ์Šคํ‚จ
16 StartupVideo Steam deck ์ „์šฉ ํŠน์ˆ˜ ์‹œ์ž‘ ์˜์ƒ

๋ฌผ๋ก , ์ด ์†์„ฑ๊ฐ’์— ์‚ฌ์šฉํ•ด์•ผ ํ•  ํƒ€์ž…์€ ๋ณดํ†ต 2, 3, 4, 5๋งŒ์„ ํฌํ•จํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ํƒ€์ž…๋งŒ STM์—์„œ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ASF๋Š” ์•„์ดํ…œ์˜ ํฌ๊ท€๋„๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์ ์ ˆํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์ด๋ชจํ‹ฐ์ฝ˜์ด๋‚˜ ๋ฐฐ๊ฒฝ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ASF๋Š” ๊ฐ™์€ ๊ฒŒ์ž„์˜ ๊ฐ™์€ ํƒ€์ž…์˜ ์ด๋ชจํ‹ฐ์ฝ˜์ด๋‚˜ ๋ฐฐ๊ฒฝ์„ ๊ณตํ‰ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ๋™์ผํ•œ ํฌ๊ท€๋„๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

ASF๋Š” ๊ฑฐ๋ž˜ ๋ด‡์ด ์•„๋‹ˆ๋ฉฐ, ์žฅํ„ฐ ๊ฐ€๊ฒฉ์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Œ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ํ•œ ์„ธํŠธ ๋‚ด์˜ ๋™์ผํ•œ ํฌ๊ท€๋„๋ฅผ ๊ฐ€์ง„ ์•„์ดํ…œ์ด ๊ฐ™์€ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ด ์˜ต์…˜์€ ๋‹น์‹ ์„ ์œ„ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์œ„์˜ ๋ฌธ์žฅ์„ ์ดํ•ดํ•˜๊ณ  ๋™์˜ํ•˜๋Š”์ง€ ๋‘๋ฒˆ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

๋ฌด์Šจ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ 5๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


OnlineFlags

๊ธฐ๋ณธ๊ฐ’์ด 0์ธ ushort flags ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ **OnlineStatus**๋ฅผ ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, Steam ๋„คํŠธ์›Œํฌ์— ์•Œ๋ฆด ์ถ”๊ฐ€์ ์ธ ์˜จ๋ผ์ธ ์ƒํƒœ(presence) ๊ธฐ๋Šฅ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Offline์ด ์•„๋‹Œ **OnlineStatus**์ด ํ•„์š”ํ•˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ ์˜จ๋ผ์ธ ์ƒํƒœ(presence) ํ”Œ๋ž˜๊ทธ ์—†์Œ, ๊ธฐ๋ณธ๊ฐ’
2 InJoinableGame ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฐธ๊ฐ€ ๊ฐ€๋Šฅํ•œ(joinable) ๊ฒŒ์ž„ ์ค‘์ž„
8 RemotePlayTogether ํด๋ผ์ด์–ธํŠธ๊ฐ€ remote play together ์„ธ์…˜์„ ์‚ฌ์šฉ ์ค‘์ž„
256 ClientTypeWeb ํด๋ผ์ด์–ธํŠธ๊ฐ€ web ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ ์ค‘์ž„
512 ClientTypeMobile ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ์‚ฌ์šฉ ์ค‘์ž„
1024 ClientTypeTenfoot ํด๋ผ์ด์–ธํŠธ๊ฐ€ big picture ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ ์ค‘์ž„
2048 ClientTypeVR ํด๋ผ์ด์–ธํŠธ๊ฐ€ VR ํ—ค๋“œ์…‹์„ ์‚ฌ์šฉ ์ค‘์ž„

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์•Œ์•„๋ณด๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด **JSON ๋งคํ•‘**์„ ํ™•์ธํ•ด๋ณด์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” EPersonaStateFlag ํƒ€์ž…์—๋Š” ๋” ๋งŽ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์ง€๋งŒ, ์ €ํฌ๊ฐ€ ์•„๋Š” ํ•œ ์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ๋Š” ์ „ํ˜€ ํšจ๊ณผ๊ฐ€ ์—†์–ด์„œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 0์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.


OnlineStatus

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ŠคํŒ€ ๋„คํŠธ์›Œํฌ์— ๋กœ๊ทธ์ธ ํ›„ ์ŠคํŒ€ ๋„คํŠธ์›Œํฌ์— ์•Œ๋ ค์ค„ ํ™œ๋™ ์ƒํƒœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํ™œ๋™ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„
0 ์˜คํ”„๋ผ์ธ
1 ์˜จ๋ผ์ธ
2 ๋‹ค๋ฅธ ์šฉ๋ฌด ์ค‘
3 ์ž๋ฆฌ ๋น„์›€
4 ์ˆ˜๋ฉด ์ค‘
5 LookingToTrade
6 LookingToPlay
7 ์ˆจ๊ธฐ(Invisible)

์˜คํ”„๋ผ์ธ ์ƒํƒœ๋Š” ์ฃผ ๊ณ„์ •์— ๊ทน๋„๋กœ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•Œ๋‹ค์‹œํ”ผ ๊ฒŒ์ž„์„ ๋†์‚ฌ์ง€์œผ๋ฉด ์ŠคํŒ€ ์ƒํƒœ๊ฐ€ "XXX๋ฅผ ํ”Œ๋ ˆ์ด์ค‘"์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” ๋†์‚ฌ๋ฅผ ์ง“๊ณ  ์žˆ๋Š”๋ฐ ํ”Œ๋ ˆ์ด๋ฅผ ํ•˜๋Š”๊ฒƒ์œผ๋กœ ํ˜ผ๋™์šธ ์ฃผ์–ด ๋‹น์‹ ์˜ ์นœ๊ตฌ๋“ค์ด ์˜คํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ASF๋กœ ์นด๋“œ ๋†์‚ฌ์ค‘์ผ๋•Œ "๊ฒŒ์ž„์ค‘"์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š์•„ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ASF๊ฐ€ ์ •์ƒ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ŠคํŒ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋กœ๊ทธ์ธํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์‹ค ์ŠคํŒ€ ๋„คํŠธ์›Œํฌ์— ์ ‘์†ํ•ด์„œ, ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ด์ค‘์ด์ง€๋งŒ, ์šฐ๋ฆฌ์˜ ์กด์žฌ๋ฅผ ์ „ํ˜€ ์•Œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ ์ƒํƒœ์—์„œ ํ”Œ๋ ˆ์ดํ–ˆ๋˜ ๊ฒŒ์ž„๋„ ํ”Œ๋ ˆ์ด ์‹œ๊ฐ„์— ํฌํ•จ๋˜๋ฉฐ, ํ”„๋กœํ•„์˜ "์ตœ๊ทผ์— ํ”Œ๋ ˆ์ดํ•œ ๊ฒŒ์ž„"์— ํ‘œ์‹œ๋œ ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค.

๊ทธ ์™ธ์—, ์ด ๊ธฐ๋Šฅ์€ ASF๋Š” ์‹คํ–‰์ค‘์ด์ง€๋งŒ ์ŠคํŒ€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋™์‹œ์— ์—ด์–ด๋†“์ง€ ์•Š๊ณ ๋„ ์•Œ๋ฆผ๊ณผ ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ASF๊ฐ€ ์ŠคํŒ€ ํด๋ผ์ด์–ธํŠธ ๊ทธ ์ž์ฒด์ธ ๊ฒƒ ์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋ฉฐ, ASF๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋˜ ์•„๋‹ˆ๋˜ ์ŠคํŒ€์ด ๋ชจ๋“  ๋ฉ”์‹œ์ง€์™€ ์ด๋ฒคํŠธ๋ฅผ ASF๋กœ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ASF์™€ ์ŠคํŒ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‘˜ ๋‹ค ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ASF๊ฐ€ ์‹คํ–‰์ค‘์ด๋ผ๋ฉด ์ŠคํŒ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๋ฐ›์„ ์ˆ˜ ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํŠน์ • ์ด๋ฒคํŠธ์™€ ๋ฉ”์‹œ์ง€๋ฅผ "๋ฐฐ๋‹ฌ๋œ" ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ ์ƒํƒœ๋Š” ์ด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ด ๊ฒฝ์šฐ ์–ด๋–ค ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด๋ฒคํŠธํŠธ๋กœ๋„ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์™€ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ๋‹น์‹ ์ด ๋Œ์•„์˜ค๋ฉด ์ฝ์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜คํ”„๋ผ์ธ(Offline) ๋ชจ๋“œ๋กœ ์‹คํ–‰ ์ค‘์ธ ASF๋Š” ์ฑ„ํŒ…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒํƒœ(presence)๊ฐ€ ์‚ฌ์‹ค์ƒ ์™„์ „ํžˆ ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ‰์†Œ์ฒ˜๋Ÿผ Steam ์ฑ„ํŒ…์„ ํ†ตํ•œ ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋Œ€์‹  ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ(์ƒํƒœ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์Œ), ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์•Œ๋ฆผ๊ณผ ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ •๋ฆฌํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ๋Š” (์ƒํƒœ ์ธก๋ฉด์—์„œ) ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ช…๋ น์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ถ€๊ณ„์ •์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ์—๋Š” ํ•œ ๊ฐ€์ง€ ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค โ€“ ์ฃผ(primary) ๊ณ„์ •๊ณผ๋Š” ์ž˜ ๋งž์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ASF ์ž์ฒด๋Š” ์ƒํƒœ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋”๋ผ๋„, ํ˜„์žฌ ์˜จ๋ผ์ธ ์ƒํƒœ์ธ ์–ด๋–ค Steam ์„ธ์…˜์ด๋“  ์ƒํƒœ๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ASF ์ธก์—์„œ ๊ณ ์น  ์ˆ˜ ์—†๋Š” Steam ๋„คํŠธ์›Œํฌ์˜ ํ˜„์žฌ ํ•œ๊ณ„/๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋™์ผํ•œ ๊ณ„์ •์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์„ธ์…˜๋„ ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF๊ฐ€ ์œ ์ผํ•œ ํ™œ์„ฑ ์„ธ์…˜์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ถ€๊ณ„์ •์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ, ์ฃผ ๊ณ„์ •์—์„œ๋Š” ์นœ๊ตฌ๋“ค์—๊ฒŒ ์˜จ๋ผ์ธ(Online)์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด์„œ ASF ํ™œ๋™๋งŒ ์ˆจ๊ธฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ˆจ๊ธฐ(Invisible) ๋ชจ๋“œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์ „ํ˜€ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค (๋Œ€์‹  ์˜คํ”„๋ผ์ธ(Offline) ๋ชจ๋“œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค). ์ด ํ•œ๊ณ„/๋ฒ„๊ทธ๊ฐ€ ์–ธ์  ๊ฐ€ Valve์— ์˜ํ•ด ํ•ด๊ฒฐ๋˜๊ธธ ๋ฐ”๋ผ์ง€๋งŒ, ์กฐ๋งŒ๊ฐ„ ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฑฐ๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค...

์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ์ฃผ ๊ณ„์ •์€ 0 (์˜คํ”„๋ผ์ธ)์œผ๋กœ ๋†“๊ณ  ๋‹ค๋ฅธ ๊ณ„์ •์€ ๊ธฐ๋ณธ๊ฐ’์ธ 1 (์˜จ๋ผ์ธ) ๋กœ ๋‘๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.


PasswordFormat

๊ธฐ๋ณธ๊ฐ’์ด 0(PlainText)์ธ byte ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ SteamPassword ์†์„ฑ์˜ ํ˜•์‹(format)์„ ์ •์˜ํ•˜๋ฉฐ, ํ˜„์žฌ security ์„น์…˜์— ๋ช…์‹œ๋œ ๊ฐ’๋“ค์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. SteamPassword ์†์„ฑ์ด ์‹ค์ œ๋กœ ์ผ์น˜ํ•˜๋Š” PasswordFormat์— ๋งž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ํ•ด๋‹น ์„น์…˜์— ๋ช…์‹œ๋œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, PasswordFormat์„ ๋ณ€๊ฒฝํ•˜๋ฉด SteamPassword๋Š” ๊ทธ ํ›„์— ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ด๋ฏธ ๊ทธ ํ˜•์‹์œผ๋กœ ๋ฐ”๋€Œ์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

์ด๋ฏธ ์ตœ์†Œ ํ•œ ๋ฒˆ Steam ๋„คํŠธ์›Œํฌ์— ๋กœ๊ทธ์ธํ•œ ์ ์ด ์žˆ๋Š” ๋ด‡์˜ PasswordFormat์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด, ๋‹ค์Œ ๋ด‡ ์‹œ์ž‘ ์‹œ ์ผํšŒ์„ฑ ๋ณตํ˜ธํ™”(decrypt) ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€“ ์ด๋Š” PasswordFormat์ด Bot.db ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ ๋‚ด ๋ฏผ๊ฐํ•œ ์†์„ฑ๋“ค์˜ ์ž๋™ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”์—๋„ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋ฌด์‹œํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ASF๊ฐ€ ์ด ์ƒํ™ฉ์—์„œ ์ž์ฒด์ ์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋งค๋ฒˆ ์žฌ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ๋“ฑ ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ์›์ธ์„ ์กฐ์‚ฌํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


RedeemingPreferences

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ cdํ‚ค ๋“ฑ๋ก์—์„œ ASF ๋ด‡์˜ ํ–‰๋™์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ redeeming preference ์—†์Œ, ๊ธฐ๋ณธ๊ฐ’
1 Forwarding redeemํ•  ์ˆ˜ ์—†๋Š” ํ‚ค๋ฅผ ๋‹ค๋ฅธ ๋ด‡์œผ๋กœ ์ „๋‹ฌ
2 Distributing ๋ชจ๋“  ํ‚ค๋ฅผ ๋ณธ์ธ ๋ฐ ๋‹ค๋ฅธ ๋ด‡๋“ค์—๊ฒŒ ๋ถ„๋ฐฐ
4 KeepMissingGames ์ „๋‹ฌํ•  ๋•Œ (์ž ์žฌ์ ์œผ๋กœ) ์—†๋Š” ๊ฒŒ์ž„์— ๋Œ€ํ•œ ํ‚ค๋Š” ์œ ์ง€ํ•˜๋ฉฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ ๋‚จ๊ฒจ๋‘ 
8 AssumeWalletKeyOnBadActivationCode BadActivationCode ํ‚ค๋ฅผ CannotRedeemCodeFromClient์™€ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ, ์ง€๊ฐ‘ ํ‚ค(wallet key)๋กœ ๋“ฑ๋ก์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด **json mapping**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Forwarding์€ ๋“ฑ๋กํ•  ์ˆ˜ ์—†๋Š” ํ‚ค๋ฅผ ํ•ด๋‹น ๊ฒŒ์ž„์„ ๋ณด์œ ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ๋˜์–ด ๋กœ๊ทธ์ธ ์ค‘์ธ ๋ด‡์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค (ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ). ๊ฐ€์žฅ ํ”ํ•œ ๊ฒฝ์šฐ๋Š” AlreadyPurchased(์ด๋ฏธ ๊ตฌ๋งคํ•œ ๊ฒŒ์ž„)๋ฅผ ํ•ด๋‹น ๊ฒŒ์ž„์ด ์—†๋Š” ๋‹ค๋ฅธ ๋ด‡์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์ด ์˜ต์…˜์€ DoesNotOwnRequiredApp, RateLimited, RestrictedCountry ๋“ฑ ๋‹ค๋ฅธ ์ƒํ™ฉ๋„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Distributing์€ ๋ด‡์ด ๋ฐ›์€ ๋ชจ๋“  ํ‚ค๋ฅผ ์ž๊ธฐ ์ž์‹ ๊ณผ ๋‹ค๋ฅธ ๋ด‡๋“ค์—๊ฒŒ ๋‚˜๋ˆ„์–ด ๋ถ„๋ฐฐํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๋ด‡์ด ๋ฐฐ์น˜(batch)์—์„œ ํ‚ค๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒŒ์ž„์˜ ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋™์ผํ•œ ๊ฒŒ์ž„์˜ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ฑ๋กํ•˜๋ฉด์„œ ๋ด‡๋“ค์—๊ฒŒ ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ํ•œ ๋ฒˆ์˜ redeem ์ž‘์—…์—์„œ ํ‚ค๋ฅผ ๋‹จ ํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค (๋ถ„๋ฐฐํ•  ์ถ”๊ฐ€ ํ‚ค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

KeepMissingGames๋Š” ๋“ฑ๋ก ์ค‘์ธ ํ‚ค๊ฐ€ ์‹ค์ œ๋กœ ๋ณธ์ธ์˜ ๋ด‡์ด ๋ณด์œ ํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Forwarding์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Forwarding์€ DoesNotOwnRequiredApp, RateLimited, RestrictedCountry ๋“ฑ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ , AlreadyPurchased ํ‚ค๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์˜ต์…˜์€ ์ฃผ ๊ณ„์ •์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ด‡์ด ์ผ์‹œ์ ์œผ๋กœ RateLimited ์ƒํƒœ๊ฐ€ ๋˜๋”๋ผ๋„ ํ•ด๋‹น ๊ณ„์ •์—์„œ ๋“ฑ๋ก ์ค‘์ธ ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„์ž…๋‹ˆ๋‹ค. ์„ค๋ช…์—์„œ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, Forwarding์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ด ํ•„๋“œ๋Š” ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

AssumeWalletKeyOnBadActivationCode๋Š” BadActivationCode ํ‚ค๋ฅผ CannotRedeemCodeFromClient๋กœ ๊ฐ„์ฃผํ•˜๋„๋ก ํ•˜์—ฌ, ASF๊ฐ€ ์ด๋ฅผ ์ง€๊ฐ‘ ํ‚ค(wallet key)๋กœ ๋“ฑ๋ก์„ ์‹œ๋„ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋Š” Steam์ด ์ง€๊ฐ‘ ํ‚ค๋ฅผ (๊ธฐ์กด์ฒ˜๋Ÿผ CannotRedeemCodeFromClient๊ฐ€ ์•„๋‹ˆ๋ผ) BadActivationCode๋กœ ์•Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ, ์ด๋กœ ์ธํ•ด ASF๊ฐ€ ํ•ด๋‹น ํ‚ค๋ฅผ ์•„์˜ˆ ๋“ฑ๋ก ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์œ ํšจํ•˜์ง€ ์•Š์€ ํ‚ค๋ฅผ ์ง€๊ฐ‘ ์ฝ”๋“œ๋กœ ๋“ฑ๋ก ์‹œ๋„ํ•˜๊ฒŒ ๋˜์–ด, (์ž ์žฌ์ ์œผ๋กœ ์œ ํšจํ•˜์ง€ ์•Š์€) ๊ณผ๋„ํ•œ ์š”์ฒญ์ด Steam ์„œ๋น„์Šค๋กœ ์ „์†ก๋˜๋ฉฐ ๊ทธ๋กœ ์ธํ•œ ์—ฌ๋Ÿฌ ์ž ์žฌ์  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ง€๊ฐ‘ ํ‚ค๋ฅผ ๋“ฑ๋กํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ForceAssumeWalletKey redeem^ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ, ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ํ•ด๋‹น ์šฐํšŒ ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

Forwarding๊ณผ Distributing์„ ๋‘˜ ๋‹ค ํ™œ์„ฑํ™”ํ•˜๋ฉด forwarding ๊ธฐ๋Šฅ ์œ„์— distributing ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด, ASF๊ฐ€ ํ•˜๋‚˜์˜ ํ‚ค๋ฅผ ๋ชจ๋“  ๋ด‡์— ์ˆœ์„œ๋Œ€๋กœ ๋จผ์ € ๋“ฑ๋ก ์‹œ๋„ํ•œ ๋’ค(forwarding) ๋‹ค์Œ ํ‚ค๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(distributing). ์ด ์˜ต์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ Forwarding์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๋งค๋ฒˆ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ํ‚ค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ (์ด๋Š” Forwarding๋งŒ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๋™์ž‘์ž…๋‹ˆ๋‹ค) ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ๋งˆ๋‹ค ๋ด‡์„ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘ ๋ฐฉ์‹์€ ๋Œ€๋ถ€๋ถ„ ํ˜น์€ ๋ชจ๋“  ํ‚ค๊ฐ€ ๋™์ผํ•œ ๊ฒŒ์ž„์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ Forwarding๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋จผ์ € ํ•œ ๋ด‡์—๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ๋“ฑ๋ก ์‹œ๋„ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ(์ด๋Š” ๊ฐ ํ‚ค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒŒ์ž„์ธ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค), Forwarding + Distributing์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ํ‚ค๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ด‡์„ ์ „ํ™˜ํ•˜์—ฌ ์ƒˆ ํ‚ค ๋“ฑ๋ก ์ž‘์—…์„ ์ฒ˜์Œ ๋ด‡์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ด‡์—๊ฒŒ "๋ถ„๋ฐฐ"ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” ํ‚ค๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒŒ์ž„์ธ ๊ฒฝ์šฐ, ํ‚ค๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ์‹œ๋„ ํ•œ ๋ฒˆ์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์–ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค).

๋ชจ๋“  ๋“ฑ๋ก ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‹ค์ œ ๋ด‡ ์ˆœ์„œ๋Š” ์•ŒํŒŒ๋ฒณ์ˆœ์ด๋ฉฐ, ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ด‡(์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ, ์ค‘์ง€๋จ ๋“ฑ)์€ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. IP๋ณ„ ๋ฐ ๊ณ„์ •๋ณ„๋กœ ์‹œ๊ฐ„๋‹น ๋“ฑ๋ก ์‹œ๋„ ํšŸ์ˆ˜ ์ œํ•œ์ด ์žˆ์œผ๋ฉฐ, OK๋กœ ๋๋‚˜์ง€ ์•Š์€ ๋ชจ๋“  ๋“ฑ๋ก ์‹œ๋„๋Š” ์‹คํŒจํ•œ ์‹œ๋„๋กœ ์ง‘๊ณ„๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ASF๋Š” AlreadyPurchased ์‹คํŒจ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฏธ ํ•ด๋‹น ๊ฒŒ์ž„์„ ๋ณด์œ ํ•œ ๋‹ค๋ฅธ ๋ด‡์—๊ฒŒ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๋„๋ก ์‹œ๋„ํ•˜์ง€๋งŒ, Steam์˜ ๋ผ์ด์„ ์Šค ์ฒ˜๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ํ•ญ์ƒ ๋ณด์žฅ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Forwarding์ด๋‚˜ Distributing๊ณผ ๊ฐ™์€ ๋“ฑ๋ก ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด RateLimited์— ๊ฑธ๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ํ•ญ์ƒ ๋†’์•„์ง‘๋‹ˆ๋‹ค.

๋˜ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†๋Š” ๋ด‡์—๊ฒŒ๋Š” ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ๋„ ์œ ์˜ํ•˜์„ธ์š”. ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด status ASF **๋ช…๋ น์–ด**๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋“ฑ๋ก ๊ณผ์ •์— ํฌํ•จํ•˜๋ ค๋Š” ๋ชจ๋“  ๋ด‡์— ๋Œ€ํ•ด ์ตœ์†Œ Operator ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.


RemoteCommunication

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 3์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์›๊ฒฉ ์ œ3์ž ์„œ๋น„์Šค์™€์˜ ํ†ต์‹ ์— ๋Œ€ํ•œ ๋ด‡๋ณ„ ASF ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ์ œ3์ž์™€์˜ ํ†ต์‹ ์ด ์ „ํ˜€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ASF ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
1 SteamGroup **ASF์˜ Steam ๊ทธ๋ฃน**๊ณผ์˜ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค
2 PublicListing ์‚ฌ์šฉ์ž๊ฐ€ **TradingPreferences**์—์„œ SteamTradeMatcher๋„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ, ๋“ฑ๋ก(listing)์„ ์œ„ํ•ด **ASF์˜ STM listing**๊ณผ์˜ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด **json mapping**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์€ ASF๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์ œ3์ž ํ†ต์‹ ์„ ํฌํ•จํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ๋‹ค๋ฅธ ์„ค์ •์—์„œ ์•”์‹œ์ ์œผ๋กœ ํฌํ•จ๋˜์ง€ ์•Š๋Š” ํ†ต์‹ ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ASF์˜ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ, ASF๋Š” ์„ค์ •์— ๋”ฐ๋ผ GitHub(๋‹ค์šด๋กœ๋“œ์šฉ)์™€ ์ €ํฌ ์„œ๋ฒ„(์ฒดํฌ์„ฌ ๊ฒ€์ฆ์šฉ) ์–‘์ชฝ ๋ชจ๋‘์™€ ํ†ต์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, **TradingPreferences**์—์„œ MatchActively๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋“ฑ๋ก๋œ ๋ด‡ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ €ํฌ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ remote communication ์„น์…˜์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SendTradePeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ FarmingPreferences์˜ SendOnFarmingFinished ์„ค์ •๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, ํ•œ ๊ฐ€์ง€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค - ํŒŒ๋ฐ์ด ๋๋‚ฌ์„ ๋•Œ ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ด๋Š” ๋Œ€์‹ , ๋‚จ์€ ํŒŒ๋ฐ๋Ÿ‰๊ณผ ๊ด€๊ณ„์—†์ด SendTradePeriod ์‹œ๊ฐ„๋งˆ๋‹ค ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๊ณ„์ •์˜ ๋†์‚ฌ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ํ‰์†Œ์— ๋ฃจํŒ… ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 0์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ด‡์ด ๋งค์ผ ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ด๊ธธ ์›ํ•œ๋‹ค๋ฉด ์—ฌ๊ธฐ์— 24๋ฅผ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์€ **ASF 2FA**์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€๋งŒ, 2FA ํ™•์ธ์„ ์ˆ˜๋™์œผ๋กœ ์ œ๋•Œ ์ฒ˜๋ฆฌํ•  ๊ณ„ํš์ด๋ผ๋ฉด ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 0์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.


SteamLogin

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์ด Steam์— ๋กœ๊ทธ์ธํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Steam ๋กœ๊ทธ์ธ ์•„์ด๋””๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Steam ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹ , config์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ASF๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ null์„ ์œ ์ง€ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ config ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


SteamMasterClanID

ulong ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋ด‡์ด ์ž๋™์œผ๋กœ ๊ฐ€์ž…ํ•ด์•ผ ํ•˜๋Š” Steam ๊ทธ๋ฃน ๋˜๋Š” ๊ทธ๋ฃน๋Œ€ํ™”์˜ steamID๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน์˜ SteamID๋Š” ์—ฌ๊ธฐ ๋กœ ์ด๋™ํ•ด์„œ /memberslistxml?xml=1 ์„ ๋งํฌ์˜ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ ๋ชจ์–‘์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ณผ์˜ <groupID64> ํƒœ๊ทธ์—์„œ ๊ทธ๋ฃน์˜ SteamID๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” 103582791440160998 ์ž…๋‹ˆ๋‹ค. ๋ด‡์€ ์‹œ์ž‘์‹œ์— ํ•ด๋‹น ๊ทธ๋ฃน์— ๊ฐ€์ž…์„ ์‹œ๋„ํ•˜๊ณ , ๋˜ํ•œ ์ด ๊ทธ๋ฃน์˜ ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜๋ฝํ•˜์—ฌ ์ด ๊ทธ๋ฃน์ด ๋น„๊ณต๊ฐœ์ธ ๊ฒฝ์šฐ ์ˆ˜๋™์œผ๋กœ ๋ด‡์„ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ด‡์„ ์œ„ํ•œ ๊ทธ๋ฃน์ด ์—†๋‹ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์ธ 0์œผ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


SteamParentalCode

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ Steam ๋ณดํ˜ธ์ž PIN์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” Steam ๋ณดํ˜ธ์ž ๊ธฐ๋Šฅ์œผ๋กœ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณดํ˜ธ์ž ์ž ๊ธˆ ํ•ด์ œ PIN์„ ASF์— ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ null์€ ์ด ๊ณ„์ •์„ ์ž ๊ธˆ ํ•ด์ œํ•˜๋Š” ๋ฐ Steam ๋ณดํ˜ธ์ž PIN์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๋œป์ด๋ฉฐ, Steam ๋ณดํ˜ธ์ž ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋Œ€์ฒด๋กœ ์ด ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ๋œ ์ƒํ™ฉ์—์„œ๋Š” ASF๊ฐ€ ์œ ํšจํ•œ Steam ๋ณดํ˜ธ์ž ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋Š” ๊ณผ๋„ํ•œ OS ๋ฆฌ์†Œ์Šค์™€ ์ถ”๊ฐ€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ ์„ฑ๊ณต์ด ๋ณด์žฅ๋˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ธฐ๋Šฅ์— ์˜์กดํ•˜์ง€ ๋ง๊ณ , ASF๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก config์— ์œ ํšจํ•œ SteamParentalCode๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ASF๊ฐ€ PIN์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์ง€๋งŒ ์Šค์Šค๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.


์ŠคํŒ€ ์•”ํ˜ธ(SteamPassword)

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์ด Steam์— ๋กœ๊ทธ์ธํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Steam ์•”ํ˜ธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Steam ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹ , config์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ASF๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ null์„ ์œ ์ง€ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ config ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


SteamTradeToken

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์นœ๊ตฌ ๋ชฉ๋ก์— ๋‹น์‹ ์˜ ๋ด‡์ด ์žˆ๋‹ค๋ฉด, ๊ฑฐ๋ž˜ ํ† ํฐ์„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ๋‹น์‹ ์—๊ฒŒ ์ฆ‰์‹œ ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์ธ null๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์นœ๊ตฌ ๋ชฉ๋ก์— ๋‹น์‹ ์˜ ๋ด‡์ด ์—†๋‹ค๋ฉด ์ด ๋ด‡์ด ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ผ ์‚ฌ์šฉ์ž์˜ ๊ฑฐ๋ž˜ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ  ์ฑ„์›Œ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด ์†์„ฑ๊ฐ’์€ ์ด ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ SteamUserPermissions์ด ์ฃผ์ธ(Master) ๊ถŒํ•œ์œผ๋กœ ์ •์˜๋œ ๊ณ„์ •์˜ ๊ฑฐ๋ž˜ ํ† ํฐ์œผ๋กœ ์ฑ„์›Œ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์ธ(Master) ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ•ด์„œ, ์—ฌ๊ธฐ ๋ฅผ ๋ฐฉ๋ฌธํ•ด์„œ ๊ฑฐ๋ž˜ URL์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ํ† ํฐ์€ ๋‹น์‹ ์˜ ๊ฑฐ๋ž˜ URL์˜ &token= ๋’ค์˜ 8์ž๋ฆฌ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ 8์ž๋ฆฌ ๋ฌธ์ž๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์—ฌ๊ธฐ SteamTradeToken์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค. ์ „์ฒด ๊ฑฐ๋ž˜ URL์ด๋‚˜ &token= ๋ถ€๋ถ„์„ ํฌํ•จํ•˜์ง€ ๋ง๊ณ  ์˜ค์ง ํ† ํฐ(8์ž๋ฆฌ)๋งŒ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.


SteamUserPermissions

ImmutableDictionary<ulong, byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ 64๋น„ํŠธ Steam ID๋กœ ์ธ์‹๋˜๋Š” Steam ์‚ฌ์šฉ์ž์™€ ASF ์ธ์Šคํ„ด์Šค์—์„œ์˜ ๊ถŒํ•œ์„ ํŠน์ •ํ•˜๋Š” byte ์ˆซ์ž๋กœ ๋งค์นญ๋˜๋Š” ์‚ฌ์ „ ์†์„ฑ๊ฐ’์ž…๋‹ˆ๋‹ค. ASF์—์„œ ํ˜„์žฌ ๊ฐ€๋Šฅํ•œ ๋ด‡ ๊ถŒํ•œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ ๊ถŒํ•œ ์—†์Œ. ์ด๋Š” ์ฃผ๋กœ ์ด ๋”•์…”๋„ˆ๋ฆฌ์— ์—†๋Š” Steam ID์— ๋ถ€์—ฌ๋˜๋Š” ๊ธฐ์ค€๊ฐ’์ด๋ฉฐ, ์ด ๊ถŒํ•œ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
1 ๊ฐ€์กฑ ๊ณต์œ (FamilySharing) ๊ฐ€์กฑ ๊ณต์œ  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ ‘๊ทผ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋˜ํ•œ ์ฐธ์กฐ์šฉ ๊ฐ’์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•œ Steam ID๋ฅผ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2 ์šด์˜์ž(Operator) ์ฃผ๋กœ ๋ผ์ด์„ ์Šค ์ถ”๊ฐ€์™€ ํ‚ค ๋“ฑ๋ก๊ณผ ๊ฐ™์€ ๋ด‡ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
3 ์ฃผ์ธ(Master) ๋ด‡ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์ฒด ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์†์„ฑ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ถŒํ•œ์€ ASF ๋ช…๋ น์–ด ์— ์ ‘๊ทผํ•  ๋•Œ ์ค‘์š”ํ•˜์ง€๋งŒ, ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋งŽ์€ ASF ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š”๋ฐ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณธ์ธ ๊ณ„์ •์„ Master๋กœ ์„ค์ •ํ•˜๊ณ , ์นœ๊ตฌ 2~3๋ช…์—๊ฒŒ๋Š” Operator ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์—ฌ ASF๋กœ ๋ด‡์˜ ํ‚ค๋ฅผ ์‰ฝ๊ฒŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋˜, ๋ด‡์„ ์ค‘์ง€์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์€ ํ•  ์ˆ˜ ์—†๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ์‰ฝ๊ฒŒ ์ค„์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹น์‹ ์˜ ๋ด‡์„ ํŠน์ •ํ–‰๋™์„ ํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ํ•œ ์‚ฌ์šฉ์ž๋งŒ์„ ์ฃผ์ธ(Master)์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋งŒํผ์„ ์šด์˜์ž(Operator) ๋ฐ ๊ทธ ์ดํ•˜๋กœ ์„ค์ •ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ๋ช…์˜ Master๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ASF๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋ด‡์—๊ฒŒ ์ „์†ก๋œ ๋ชจ๋“  Master์˜ ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋“ค๊ณผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‹จ์ผ ๋Œ€์ƒ์ด ํ•„์š”ํ•œ ์ž‘์—…(์˜ˆ: loot ์š”์ฒญ, ๊ทธ๋ฆฌ๊ณ  FarmingPreferences์˜ SendOnFarmingFinished ์„ค์ •์ด๋‚˜ SendTradePeriod์™€ ๊ฐ™์€ ์†์„ฑ)์—์„œ๋Š” ์ด๋“ค ์ค‘ (Steam ID๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€) ํ•œ ๋ช…๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์•ฝ์‚ฌํ•ญ, ํŠนํžˆ loot ์š”์ฒญ์ด ์‹ค์ œ๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ Master์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ Steam ID๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ Master์—๊ฒŒ ์•„์ดํ…œ์„ ์ „์†กํ•œ๋‹ค๋Š” ์ ์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— ์—ฌ๋Ÿฌ ๋ช…์˜ Master ๊ถŒํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‹จ์ผ master ๋ฐฉ์‹์„ ์—ฌ์ „ํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์†Œ์œ ์ž(Owner) ๊ถŒํ•œ์ด ๋˜ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ •์˜ SteamOwnerID ์†์„ฑ๊ฐ’์— ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. SteamUserPermissions ์†์„ฑ๊ฐ’์€ ASF ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๋ด‡ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ๋œ ๊ถŒํ•œ๋งŒ ์ •์˜ํ•˜๋ฏ€๋กœ ์†Œ์œ ์ž(Owner) ๊ถŒํ•œ์„ ์—ฌ๊ธฐ์—์„œ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ด‡๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์—์„œ SteamOwnerID๋Š” ์ฃผ์ธ(Master)๊ณผ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ SteamOwnerID๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ผญ ํ•„์š”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.


TradeCheckPeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 60์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๋Š” ๊ฑฐ๋ž˜ ์ œ์•ˆ ์•Œ๋ฆผ์„ ๋ฐ›์€ ์งํ›„ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ๊ฐ„ํ˜น Steam ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๊ทธ ์‹œ์ ์— ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์Œ ๊ฑฐ๋ž˜ ์•Œ๋ฆผ์ด๋‚˜ ๋ด‡ ์žฌ์‹œ์ž‘์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๊ฑฐ๋ž˜ ์ œ์•ˆ์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ๋ฐฉ์น˜๋˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ฑฐ๋ž˜๊ฐ€ ์ทจ์†Œ๋˜๊ฑฐ๋‚˜ ์ดํ›„ ์‹œ์ ์— ์•„์ดํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 0์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ASF๋Š” TradeCheckPeriod๋ถ„๋งˆ๋‹ค ์ด๋Ÿฌํ•œ ๋ฏธ์ฒ˜๋ฆฌ ๊ฑฐ๋ž˜๋ฅผ ์ถ”๊ฐ€๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ Steam ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์š”์ฒญ๊ณผ ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜๋ฅผ ๋†“์น  ๊ฐ€๋Šฅ์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ASF๋ฅผ ๋‹จ์ˆœํžˆ ์นด๋“œ ํŒŒ๋ฐ ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๊ณ„ํš์ด ์—†๋‹ค๋ฉด, ์ด ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด 0์œผ๋กœ ์„ค์ •ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ๋ด‡์ด ๊ณต๊ฐœ ASF์˜ STM listing์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ž˜ ๋ด‡์œผ๋กœ์„œ ๋‹ค๋ฅธ ์ž๋™ํ™” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ ์ ์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 15๋ถ„ ์ •๋„๋กœ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


TradingPreferences

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๊ฑฐ๋ž˜์—์„œ ASF ๋ด‡์˜ ํ–‰๋™์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ ๊ฑฐ๋ž˜ ์„ค์ • ์—†์Œ, ๊ธฐ๋ณธ๊ฐ’
1 ๊ธฐ๋ถ€ ์ˆ˜๋ฝ(AcceptDonations) ์žƒ๋Š” ๊ฒƒ์ด ์—†๋‹ค๋ฉด ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.
2 SteamTradeMatcher STM ๊ณผ ๊ฐ™์€ ๊ฑฐ๋ž˜์— ์ˆ˜๋™์ ์œผ๋กœ ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ๊ฑฐ๋ž˜ ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.
4 ์ „๋ถ€ ๋งค์นญ(MatchEverything) SteamTradeMatcher ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ข‹์Œ, ์ค‘๋ฆฝ, ๋‚˜์จ ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.
8 ๋ด‡๊ฑฐ๋ž˜์ˆ˜๋ฝ์•ˆํ•จ(DontAcceptBotTrades) ๋‹ค๋ฅธ ๋ด‡์˜ loot ๊ฑฐ๋ž˜๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜๋ฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
16 ๋Šฅ๋™์  ๋งค์นญ(MatchActively) STM ๊ณผ ๊ฐ™์€ ๊ฑฐ๋ž˜์— ๋Šฅ๋™์ ์œผ๋กœ ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ **ItemsMatcherPlugin**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด **json mapping**์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ASF์˜ ๊ฑฐ๋ž˜ ๋…ผ๋ฆฌ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ์˜ ์„ค๋ช… ๋“ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฑฐ๋ž˜ ํ•ญ๋ชฉ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


TransferableTypes

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1, 3, 5 Steam ์•„์ดํ…œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ transfer ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ ๋ด‡ ๊ฐ„ ์ „์†ก ๋Œ€์ƒ์œผ๋กœ ๊ณ ๋ คํ•  Steam ์•„์ดํ…œ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” TransferableTypes์— ์žˆ๋Š” ์•„์ดํ…œ๋งŒ ๊ฑฐ๋ž˜ ์ œ์•ˆ์— ํฌํ•จํ•  ๊ฒƒ์ด๋ฏ€๋กœ, ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์˜ ๋ด‡ ์ค‘ ํ•˜๋‚˜์—๊ฒŒ ๋ณด๋‚ด์ง„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์—์„œ ๋ฌด์—‡์„ ๋ฐ›์„์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์•„๋ž˜์˜ ์–ด๋А๊ฒƒ์—๋„ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํƒ€์ž…
1 ๋ถ€์Šคํ„ฐ ํŒฉ(BoosterPack) ํ•œ ๊ฒŒ์ž„์˜ ๋ฌด์ž‘์œ„ ์นด๋“œ 3์žฅ์ด ๋“ค์–ด์žˆ๋Š” ๋ถ€์Šคํ„ฐ ํŒฉ
2 ์ด๋ชจํ‹ฐ์ฝ˜(Emoticon) Steam ๋Œ€ํ™”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ชจํ‹ฐ์ฝ˜
3 ์€๋ฐ• ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(FoilTradingCard) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard)์˜ ์€๋ฐ• ๋ฒ„์ „
4 ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ(ProfileBackground) Steam ํ”„๋กœํ•„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ
5 ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ(TradingCard) Steam ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ. ๋ฐฐ์ง€ ์ œ์ž‘์— ์‚ฌ์šฉ. ์€๋ฐ• ์•„๋‹˜
6 Steam ๋ณด์„(SteamGems) ๋ถ€์Šคํ„ฐ ํŒฉ ์ œ์ž‘์— ์‚ฌ์šฉ๋˜๋Š” Steam ๋ณด์„. ๋ณด์„ ๋”๋ฏธ ํฌํ•จ
7 ํŒ๋งค ์•„์ดํ…œ(SaleItem) Steam ํ• ์ธ๊ธฐ๊ฐ„๋™์•ˆ ํš๋“ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
8 ์†Œ๋ชจํ’ˆ(Consumable) ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ํŠน๋ณ„ํ•œ ์†Œ๋ชจ ์•„์ดํ…œ
9 ํ”„๋กœํ•„ ์ˆ˜์ •(ProfileModifier) Steam ํ”„๋กœํ•„ ๋ชจ์–‘์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์•„์ดํ…œ
10 ์Šคํ‹ฐ์ปค(Sticker) Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
11 ์ฑ„ํŒ…๋ฐฉ ํšจ๊ณผ(ChatEffect) Steam ์ฑ„ํŒ…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์•„์ดํ…œ
12 ๋ฏธ๋‹ˆ ํ”„๋กœํ•„ ๋ฐฐ๊ฒฝ(MiniProfileBackground) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ๋ฐฐ๊ฒฝ
13 ์•„๋ฐ”ํƒ€ ์•ก์ž(AvatarProfileFrame) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์•„๋ฐ”ํƒ€ ์•ก์ž
14 ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€(AnimatedAvatar) Steam ํ”„๋กœํ•„์šฉ ํŠน์ˆ˜ ์›€์ง์ด๋Š” ์•„๋ฐ”ํƒ€
15 ํ‚ค๋ณด๋“œ ์Šคํ‚จ(KeyboardSkin) Steam Deck์šฉ ํŠน์ˆ˜ ํ‚ค๋ณด๋“œ ์Šคํ‚จ
16 ๋ถ€ํŒ… ์˜์ƒ(StartupVideo) Steam Deck์šฉ ํŠน์ˆ˜ ๋ถ€ํŒ… ์˜์ƒ

์œ„ ์„ค์ •๊ณผ ๊ด€๊ณ„์—†์ด ASF๋Š” Steam ์ปค๋ฎค๋‹ˆํ‹ฐ ์•„์ดํ…œ(appID 753, contextID 6)๋งŒ ์š”์ฒญํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋”ฐ๋ผ์„œ ๊ฒŒ์ž„ ์•„์ดํ…œ, ์„ ๋ฌผ ๋“ฑ์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ ๋Œ€์ƒ์—์„œ ์›๋ž˜๋ถ€ํ„ฐ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

ASF์˜ ๊ธฐ๋ณธ ์„ค์ •์€ ๋ด‡์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ๋ฐฉ์‹์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉฐ, ๋ถ€์Šคํ„ฐ ํŒฉ๊ณผ (foil ํฌํ•จ) ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ๋งŒ์„ ์ „์†ก ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ •์˜๋œ ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์„ ๋งŒ์กฑ์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ์–ด๋–ป๊ฒŒ๋“  ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํƒ€์ž…์€ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œ๋จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. Valve๊ฐ€ ์ƒˆ๋กœ์šด Steam ์•„์ดํ…œ์„ ๋‚ด๋†“์•˜์„๋•Œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ, ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ASF์—์„œ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ๋งŒ์•ฝ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ๊นจ์ ธ์„œ ๋ชจ๋“  ์•„์ดํ…œ์„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด ASF๋Š” ์ „์ฒด ๋ณด๊ด€ํ•จ์„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์œผ๋กœ ๋ณด๋‚ผ๊ฒƒ์ด๋ผ๋Š” ์ ๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€์•Š๋Š” ํ•œ, ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ TransferableTypes์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์ „์†กํ•˜๊ณ  ์‹ถ๋”๋ผ๋„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ TransferableTypes์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


UseLoginKeys

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํ•ด๋‹น Steam ๊ณ„์ •์— ๋Œ€ํ•ด ASF๊ฐ€ ๋กœ๊ทธ์ธ ํ‚ค(login key) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ํ‚ค ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๊ณต์‹ Steam ํด๋ผ์ด์–ธํŠธ์˜ "๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ" ์˜ต์…˜๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ASF๋Š” ๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ๋„๋ฅผ ์œ„ํ•ด ์ผํšŒ์šฉ ์ž„์‹œ ๋กœ๊ทธ์ธ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๋กœ๊ทธ์ธ ํ‚ค๊ฐ€ ์œ ํšจํ•œ ๋™์•ˆ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ, Steam Guard, ๋˜๋Š” 2FA ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์‚ฌ์‹ค์ƒ ์—†์–ด์ง‘๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ํ‚ค๋Š” BotName.db ํŒŒ์ผ์— ์ €์žฅ๋˜๋ฉฐ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ASF๋กœ ํ•œ ๋ฒˆ๋งŒ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ๊ทธ ์ดํ›„์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ/SteamGuard/2FA ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์ธ ํ‚ค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค SteamPassword, SteamGuard, ๋˜๋Š” (**ASF 2FA**๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) 2FA ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ํ‚ค๋Š” ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์›๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ์šฐ์ˆ˜ํ•œ ๋Œ€์•ˆ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›๋ž˜ Steam ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Steam ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ๋„๋ฅผ ์œ„ํ•ด ๊ณ„์ • ์ด๋ฆ„๊ณผ ๋กœ๊ทธ์ธ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ด๋Š” ASF์—์„œ UseLoginKeys์™€ ํ•จ๊ป˜ SteamLogin์„ ์‚ฌ์šฉํ•˜๊ณ  SteamPassword๋ฅผ ๋น„์›Œ๋‘๋Š” ๊ฒƒ๊ณผ ์‚ฌ์‹ค์ƒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ, ์ด๋Ÿฐ ์‚ฌ์†Œํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ์šฐ๋ คํ•˜๋Š” ์‚ฌ์šฉ์ž๋„ ์žˆ์„ ์ˆ˜ ์žˆ์–ด, ์ด์ „ ์„ธ์…˜ ์ข…๋ฃŒ ํ›„ ์žฌ๊ฐœ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ ํ† ํฐ๋„ ASF๊ฐ€ ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ์ด ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ํ•„์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ณต์‹ Steam ํด๋ผ์ด์–ธํŠธ์—์„œ "๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅ"์„ ์ฒดํฌํ•˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ true๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


UserInterfaceMode

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋ด‡์ด Steam ๋„คํŠธ์›Œํฌ์— ๋กœ๊ทธ์ธํ•œ ํ›„ ์•Œ๋ฆด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. OnlineStatus๋ฅผ ํ†ตํ•ด ์ ‘์† ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ด ์„ค์ •์€ ์˜ˆ๋ฅผ ๋“ค์–ด Steam ์ฑ„ํŒ…์—์„œ ๊ณ„์ •์ด ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์•„๋ž˜ ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 VGUI ๊ธฐ๋ณธ Steam ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“œ
1 Tenfoot Big Picture ๋ชจ๋“œ
2 Mobile Steam ๋ชจ๋ฐ”์ผ ์•ฑ
3 Web ์›น ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜
5 MobileChat Steam ๋ชจ๋ฐ”์ผ ์ฑ„ํŒ… ์•ฑ

์ด ์†์„ฑ์ด ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” EUIMode ํƒ€์ž…์—๋Š” ๋” ๋งŽ์€ ๊ฐ’์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ €ํฌ๊ฐ€ ์•„๋Š” ํ•œ ํ˜„์žฌ๋กœ์„œ๋Š” ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๊ฐ’๋“ค์ด๋ผ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” GamingDeviceType๋„ ํ•จ๊ป˜ ํ™•์ธํ•ด๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 0์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.


WebProxy

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๋ด‡๋ณ„ ๋‚ด๋ถ€ http ๊ด€๋ จ ํ†ต์‹ , ํŠนํžˆ api.steampowered.com, steamcommunity.com, store.steampowered.com๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋  ์›น ํ”„๋ก์‹œ ์ฃผ์†Œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ASF๋Š” ์œ„์—์„œ ์ง€์ •ํ•œ ์ „์—ญ WebProxy ์„ค์ •์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ASF ์š”์ฒญ์„ ํ”„๋ก์‹œ๋กœ ์šฐํšŒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐฉํ™”๋ฒฝ, ํŠนํžˆ ์ค‘๊ตญ์˜ ๋งŒ๋ฆฌ๋ฐฉํ™”๋ฒฝ์„ ์šฐํšŒํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์€ uri ๋ฌธ์ž์—ด๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

URI ๋ฌธ์ž์—ด์€ ์Šคํ‚ด(ํ”„๋กœํ† ์ฝœ)(์ง€์› ํ˜•์‹: http/https/socks4/socks4a/socks5), ํ˜ธ์ŠคํŠธ, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ ์‚ฌํ•ญ์ธ ํฌํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์™„์ „ํ•œ uri ๋ฌธ์ž์—ด์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. "http://contoso.com:8080".

ํ”„๋ก์‹œ๊ฐ€ ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๋ฉด, WebProxyUsername๊ณผ WebProxyPassword๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ Steam ๋„คํŠธ์›Œํฌ ํ†ต์‹ (CM)๋„ ํ”„๋ก์‹œ๋กœ ์šฐํšŒ์‹œํ‚ค๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๋ด‡์˜ SteamProtocols ์†์„ฑ์„ ์˜ค์ง websocket ์ „์†ก๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฐ’, ์ฆ‰ 4๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋กœ๋Š” websocket๋งŒ ์ง€์›๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


WebProxyPassword

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ƒ WebProxy ๊ธฐ๊ธฐ์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ, digest, NTLM, Kerberos ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ์•”ํ˜ธ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ์ž ์ž๊ฒฉ์ฆ๋ช…์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WebProxy๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์ด ์˜ต์…˜์˜ ์‚ฌ์šฉ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ๊ทธ์™ธ์—๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


WebProxyUsername

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋ก์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ƒ WebProxy ๊ธฐ๊ธฐ์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋ณธ, digest, NTLM, Kerberos ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž์ด๋ฆ„ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ์ž ์ž๊ฒฉ์ฆ๋ช…์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WebProxy๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์ด ์˜ต์…˜์˜ ์‚ฌ์šฉ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ๊ทธ์™ธ์—๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ํŒŒ์ผ ๊ตฌ์กฐ

ASF๋Š” ๊ฝค ๊ฐ„๋‹จํ•œ ํŒŒ์ผ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โ”œโ”€โ”€ ๐Ÿ“ config
โ”‚     โ”œโ”€โ”€ ASF.json
โ”‚     โ”œโ”€โ”€ ASF.db
โ”‚     โ”œโ”€โ”€ Bot1.json
โ”‚     โ”œโ”€โ”€ Bot1.db
โ”‚     โ”œโ”€โ”€ Bot2.json
โ”‚     โ”œโ”€โ”€ Bot2.db
โ”‚     โ””โ”€โ”€ ...
โ”œโ”€โ”€ ArchiSteamFarm.dll
โ”œโ”€โ”€ log.txt
โ””โ”€โ”€ ...

ASF๋ฅผ ๋‹ค๋ฅธ PC ๋“ฑ ์ƒˆ๋กœ์šด ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๋ ค๋ฉด config ๋””๋ ‰ํ† ๋ฆฌ ํ•˜๋‚˜๋งŒ์„ ์ด๋™/๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด "ASF ๋ฐฑ์—…"์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋ฐฑ์—… ๋“ฑ์œผ๋กœ ASF ๋‚ด๋ถ€ํŒŒ์ผ์„ ์˜ค์—ผ์‹œํ‚ฌ ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ ๋“ฑ ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ GitHub์—์„œ ํ•ญ์ƒ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

log.txt ํŒŒ์ผ์€ ๋งˆ์ง€๋ง‰ ASF ์‹คํ–‰์œผ๋กœ ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ์–ด๋– ํ•œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋„ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์ด์Šˆ๋‚˜ ์ถฉ๋Œ, ํ˜น์€ ์ง€๋‚œ๋ฒˆ ASF ์‹คํ–‰์—์„œ ๋ฌด์Šจ์ผ์ด ์žˆ์—ˆ๋Š”์ง€ ์ •๋ณด๋กœ์จ๋„ ๊ต‰์žฅํžˆ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์Šˆ๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ด ํŒŒ์ผ์„ ์ž์ฃผ ์š”์ฒญํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ASF๋Š” ์ด ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์ง€๋งŒ, ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋ผ๋ฉด ASF ๋กœ๊น… ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

config ๋””๋ ‰ํ† ๋ฆฌ๋Š” ASF์™€ ๋ชจ๋“  ๋ด‡์˜ ํ™˜๊ฒฝ์„ค์ •์„ ๋‹ด๊ณ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

ASF.json์€ ASF์˜ ์ผ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํ™˜๊ฒฝ์„ค์ •์€ ๋ชจ๋“  ๋ด‡๊ณผ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ASF ํ”„๋กœ์„ธ์Šค ํ–‰๋™์„ ํŠน์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ASF ํ”„๋กœ์„ธ์Šค ์†Œ์œ ์ž, ์ž๋™์—…๋ฐ์ดํŠธ, ๋””๋ฒ„๊น… ๋“ฑ ์ผ๋ฐ˜ ์†์„ฑ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ด‡์ด๋ฆ„.json์€ ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ํ™˜๊ฒฝ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ด ํ™˜๊ฒฝ์„ค์ •์€ ๋ด‡ ์ธ์Šคํ„ด์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ• ์ง€๋ฅผ ํŠน์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ค์ •์€ ๊ทธ ๋ด‡์—๋งŒ ํŠน์ •๋˜๊ณ  ๋‹ค๋ฅธ ๋ด‡์— ๊ณต์œ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์—ฌ๋Ÿฌ ๋ด‡์„ ๋‹ค์–‘ํ•˜๊ณ  ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ด‡์€ ์œ ์ผํ•œ ์‹๋ณ„์ž๋ฅผ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ด‡์ด๋ฆ„์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ๊ณผ ๋ณ„๋„๋กœ ASF๋Š” config ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ASF.db๋Š” ์ผ๋ฐ˜ ASF ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์˜๊ตฌ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•˜๋ฉฐ Steam ์„œ๋ฒ„์˜ IP ๋“ฑ ASF ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋ด‡์ด๋ฆ„.db๋Š” ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ๋ด‡ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ๋œ ๋กœ๊ทธ์ธ ํ‚ค๋‚˜ ASF 2๋‹จ๊ณ„ ์ธ์ฆ๊ณผ ๊ฐ™์€ ์˜๊ตฌ ์ €์žฅ์†Œ์˜ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

BotName.keys๋Š” **๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒŒ์ž„ ๋“ฑ๋ก๊ธฐ(background games redeemer)**์— ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ•„์ˆ˜์‚ฌํ•ญ๋„ ์•„๋‹ˆ๊ณ  ์ƒ์„ฑ๋˜์ง€๋„ ์•Š์ง€๋งŒ ASF๊ฐ€ ์ธ์‹์€ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ‚ค๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

BotName.maFile์€ **ASF 2FA**๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ•„์ˆ˜์‚ฌํ•ญ๋„ ์•„๋‹ˆ๊ณ  ์ƒ์„ฑ๋˜์ง€๋„ ์•ˆ์ง€๋งŒ ๋ด‡์ด๋ฆ„์ด ASF 2๋‹จ๊ณ„ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒฝ์šฐ ASF๊ฐ€ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ASF 2๋‹จ๊ณ„ ์ธ์ฆ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.


JSON ๋งคํ•‘

๋ชจ๋“  ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์€ ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†์„ฑ๊ฐ’์˜ ํƒ€์ž…์€ ์œ ํšจํ•œ ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํƒ€์ž…์— ์œ ํšจํ•œ ๊ฐ’๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ASF๋Š” ํ™˜๊ฒฝ์„ค์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ์„ค์ •์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ConfigGenerator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋“ฑ์˜ ๋กœ์šฐ ๋ ˆ๋ฒจ ๋Œ€๋ถ€๋ถ„์„ ๋‹ค๋ฃจ๋ฏ€๋กœ ์ ์ ˆํ•œ ๊ฐ’์„ ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ณ , ์•„๋ž˜์— ๋ช…์‹œ๋œ ๋ณ€์ˆ˜ ํƒ€์ž…์„ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์€ ์ฃผ๋กœ ์ˆ˜๋™์œผ๋กœ ํ™˜๊ฒฝ์„ค์ •์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ, ์ด ์‚ฌ๋žŒ๋“ค์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์••๋‹ˆ๋‹ค.

ASF๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์€ ๋„ค์ดํ‹ฐ๋ธŒ C# ํƒ€์ž…์œผ๋กœ, ์•„๋ž˜์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


bool - true์™€ false ๊ฐ’๋งŒ ๋ฐ›๋Š” ๋ถˆ๋ฆฐํƒ€์ž…์ž…๋‹ˆ๋‹ค.

์˜ˆ: "Enabled": true


byte - 0๋ถ€ํ„ฐ 255 ๊นŒ์ง€์˜ ์ •์ˆ˜๋งŒ ๋ฐ›๋Š” Unsigned ๋ฐ”์ดํŠธ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

์˜ˆ: "ConnectionTimeout": 90


ushort - 0๋ถ€ํ„ฐ 65535 ๊นŒ์ง€์˜ ์ •์ˆ˜๋งŒ ๋ฐ›๋Š” Unsigned short ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

์˜ˆ: "WebLimiterDelay": 300


uint - 0๋ถ€ํ„ฐ 4294967295 ๊นŒ์ง€์˜ ์ •์ˆ˜๋งŒ ๋ฐ›๋Š” Unsigned ์ •์ˆ˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.


ulong - 0๋ถ€ํ„ฐ 18446744073709551615 ๊นŒ์ง€์˜ ์ •์ˆ˜๋งŒ ๋ฐ›๋Š” Unsigned long ์ •์ˆ˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

์˜ˆ: "SteamMasterClanID": 103582791440160998


string - ""์˜ ๋นˆ ๋ฌธ์ž์—ด๊ณผ null ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์–ด๋– ํ•œ ์ผ๋ จ์˜ ๋ฌธ์ž๋ฅผ ๋ฐ›๋Š” ๋ฌธ์ž์—ด ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋นˆ ์‹œํ€€์Šค์™€ null ๊ฐ’์€ ASF์—์„œ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ, ๋‘˜ ์ค‘ ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€๋Š” ๊ฐœ์ธ ์ทจํ–ฅ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค (์ €ํฌ๋Š” null์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

์˜ˆ: "SteamLogin": null, "SteamLogin": "", "SteamLogin": "MyAccountName"


Guid? - null์„ ํ—ˆ์šฉํ•˜๋Š”(nullable) UUID ํƒ€์ž…์ด๋ฉฐ, JSON์—์„œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. UUID๋Š” 0๋ถ€ํ„ฐ 9๊นŒ์ง€, ๊ทธ๋ฆฌ๊ณ  a๋ถ€ํ„ฐ f๊นŒ์ง€์˜ 32๊ฐœ 16์ง„์ˆ˜ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์†Œ๋ฌธ์ž, ๋Œ€๋ฌธ์ž, ๋Œ€์‹œ(-) ํฌํ•จ ์—ฌ๋ถ€ ๋“ฑ ๋‹ค์–‘ํ•œ ์œ ํšจ ํ˜•์‹์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ UUID ์™ธ์—๋„, ์ด ์†์„ฑ์€ nullable์ด๋ฏ€๋กœ ์ œ๊ณตํ•  UUID๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ˆ˜ ๊ฐ’์ธ null๋„ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ: "LicenseID": null, "LicenseID": "f6a0529813f74d119982eb4fe43a9a24"


ImmutableList<valueType> - ์ง€์ •๋œ valueType์˜ ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ถˆ๋ณ€(immutable) ์ปฌ๋ ‰์…˜(๋ฆฌ์ŠคํŠธ)์ž…๋‹ˆ๋‹ค. JSON์—์„œ๋Š” ์ฃผ์–ด์ง„ valueType์„ ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ํ•ด๋‹น ์†์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ง€์›ํ•˜๋ฉฐ ์ˆœ์„œ๊ฐ€ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด List๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ImmutableList<byte>์˜ ์˜ˆ์‹œ: "FarmingOrders": [15, 11, 7]


ImmutableHashSet<valueType> - ์ง€์ •๋œ valueType์˜ ๊ณ ์œ ํ•œ(์ค‘๋ณต๋˜์ง€ ์•Š๋Š”) ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ถˆ๋ณ€(immutable) ์ปฌ๋ ‰์…˜(์ง‘ํ•ฉ)์ž…๋‹ˆ๋‹ค. JSON์—์„œ๋Š” ์ฃผ์–ด์ง„ valueType์„ ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ํ•ด๋‹น ์†์„ฑ์ด ๊ณ ์œ ํ•œ(์ค‘๋ณต๋˜์ง€ ์•Š๋Š”) ๊ฐ’์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด HashSet์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ (ํ˜น์‹œ๋ผ๋„ ์ค‘๋ณต๋œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด) ํŒŒ์‹ฑ ๊ณผ์ •์—์„œ ์ด๋ฅผ ์˜๋„์ ์œผ๋กœ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

ImmutableHashSet<uint>์˜ ์˜ˆ: "Blacklist": [267420, 303700, 335590]


ImmutableDictionary<keyType, valueType> - keyType์œผ๋กœ ์ง€์ •๋œ ๊ณ ์œ  ํ‚ค์™€ valueType์œผ๋กœ ์ง€์ •๋œ ๊ฐ’์„ ๋งคํ•‘ํ•˜๋Š” ๋ถˆ๋ณ€ ๋”•์…”๋„ˆ๋ฆฌ(๋งต)์ž…๋‹ˆ๋‹ค. JSON์—์„œ๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋œ ์˜ค๋ธŒ์ ํŠธ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ keyType๋Š” ์‹ฌ์ง€์–ด ulong๊ฐ™์€ ํƒ€์ž…์ด๋”๋ผ๋„ ํ•ญ์ƒ ๋”ฐ์˜ดํ‘œ๋กœ ํ‘œ์‹œํ•จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ๋งต ์ „์ฒด์—์„œ ํ‚ค๊ฐ€ ๊ณ ์œ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์—„๊ฒฉํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉฐ, ์ด๋ฒˆ์—๋Š” JSON์— ์˜ํ•ด์„œ๋„ ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค.

ImmutableDictionary<ulong, byte>์˜ ์˜ˆ: "SteamUserPermissions": { "76561198174813138": 3, "76561198174813137": 1 }


flags - ํ”Œ๋ž˜๊ทธ๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์†์„ฑ๊ฐ’์„ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์ตœ์ข…๊ฐ’์œผ๋กœ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋™์‹œ์— ํ—ˆ์šฉ๋œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€๋Šฅํ•œ ์–ด๋А ์กฐํ•ฉ์ด๋ผ๋„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข…๊ฐ’์€ ๋ชจ๋“  ํ™œ์„ฑํ™”๋œ ์˜ต์…˜ ๊ฐ’์˜ ํ•ฉ๊ณ„๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •์˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค:

๊ฐ’ ์ด๋ฆ„
0 ์—†์Œ(None)
1 A
2 B
4 C

์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ ํ”Œ๋ž˜๊ทธ๋Š” ์ •ํ™•ํžˆ 3๊ฐœ(A, B, C)์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ์ „์ฒด์ ์œผ๋กœ 8๊ฐ€์ง€์˜ ์œ ํšจํ•œ ์กฐํ•ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

์ตœ์ข… ๊ฐ’ ํ™œ์„ฑํ™”๋œ ํ”Œ๋ž˜๊ทธ
0 ์—†์Œ(None)
1 A
2 B
3 A + B
4 C
5 A + C
6 B + C
7 A + B + C

์œ„ ๋‚ด์šฉ์ด ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด, ์ •์˜์ƒ ๊ฐ ๊ฐœ๋ณ„ ํ”Œ๋ž˜๊ทธ๋Š” ๋ฐ˜๋“œ์‹œ 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ ์œ„ ์˜ˆ์‹œ์—์„œ ์ถ”๊ฐ€๋˜๋Š” ํ”Œ๋ž˜๊ทธ์ธ D๋Š” 8 ์ด์ƒ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณดํ†ต ๊ทธ๋ž˜ํ”ฝ ๋„๊ตฌ๊ฐ€ ์ด ๊ณ„์‚ฐ์„ ๋Œ€์‹  ํ•ด์ค๋‹ˆ๋‹ค. config๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋Š” ๊ฒฝ์šฐ, ์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ์˜ ๊ฐ’์„ ๋‹จ์ˆœํžˆ ๋”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ: "SteamProtocols": 7 (์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ๊ฐ’์ด 1, 2, 4์ธ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค)


ํ˜ธํ™˜์„ฑ ๋งคํ•‘

์›น ๊ธฐ๋ฐ˜ ConfigGenerator ์‚ฌ์šฉ ์‹œ JavaScript๊ฐ€ ๋‹จ์ˆœ ulong ํ•„๋“œ๋ฅผ JSON์œผ๋กœ ์ œ๋Œ€๋กœ ์ง๋ ฌํ™”ํ•˜์ง€ ๋ชปํ•˜๋Š” ํ•œ๊ณ„๋กœ ์ธํ•ด, ulong ํ•„๋“œ๋Š” ๊ฒฐ๊ณผ config์—์„œ s_ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ๋ฌธ์ž์—ด๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "SteamOwnerID": 76561198006963719๋Š” ์ €ํฌ ConfigGenerator์— ์˜ํ•ด "s_SteamOwnerID": "76561198006963719"๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ด ๋ฌธ์ž์—ด ๋งคํ•‘์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ™˜๊ฒฝ์„ค์ •์˜ s_ ํ•ญ๋ชฉ์€ ์‹ค์ œ๋กœ ์œ ํšจํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ™˜๊ฒฝ์„ค์ •์„ ์Šค์Šค๋กœ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ๊ฐ€๋Šฅํ•˜๋ฉด ์›๋ž˜์˜ ulong ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜์ง€๋งŒ ๊ทธ๋Ÿด์ˆ˜ ์—†๋‹ค๋ฉด ์ด๋ฆ„์— s_ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ์„œ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํ•œ๊ณ„๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.


ํ™˜๊ฒฝ์„ค์ • ํ˜ธํ™˜์„ฑ

๊ธฐ์กด config์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ASF์˜ ์ตœ์šฐ์„  ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹œ๊ฒ ์ง€๋งŒ, config์— ์—†๋Š” ์†์„ฑ์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •์˜๋œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์ด ASF ์ƒˆ๋ฒ„์ „์— ๋„์ž…๋˜๋ฉด, ๋‹น์‹ ์˜ ๋ชจ๋“  ํ™˜๊ฒฝ์„ค์ •์€ ์ƒˆ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •์˜๋œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ œ๊ฑฐํ•˜๊ณ , ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์˜๋œ ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋งŒ ์ œํ•œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“  ์†์„ฑ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํ™˜๊ฒฝ์„ค์ •์„ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋‹น์‹ ์ด ์Šค์Šค๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์†์„ฑ๊ฐ’์„ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ์— ํ˜ธํ™˜์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: WebLimiterDelay).

์ด๋กœ ์ธํ•ด ASF๋Š” config๋ฅผ ๋‹ค์‹œ ํฌ๋งทํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ง„ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์ž๋™์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜/์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ •ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ๊ธฐ ์ „์šฉ config ํŒŒ์ผ์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ ASF๊ฐ€ ์ด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ, --no-config-migrate **๋ช…๋ น์ค„ ์ธ์ˆ˜**๋กœ ์ด ๋™์ž‘์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž๋™ ์žฌ์‹œ์ž‘

ASF๋Š” config๊ฐ€ "์‹ค์‹œ๊ฐ„์œผ๋กœ(on-the-fly)" ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋•๋ถ„์— ASF๋Š” ์ž๋™์œผ๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  • ์ƒˆ๋กœ์šด ๋ด‡ ํ™˜๊ฒฝ์„ค์ •์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ๊ทธ ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ๋ฐ ์‹œ์ž‘(ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
  • ์˜ˆ์ „ ๋ด‡ ํ™˜๊ฒฝ์„ค์ •์„ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ์ค‘์ง€(ํ•„์š”ํ•œ ๊ฒฝ์šฐ) ๋ฐ ์ œ๊ฑฐ
  • ๋ด‡ ํ™˜๊ฒฝ์„ค์ •์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ์ค‘์ง€ ๋ฐ ์‹œ์ž‘(ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
  • ๋ด‡ ํ™˜๊ฒฝ์„ค์ • ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ๋ด‡ ์žฌ์‹œ์ž‘(ํ•„์š”ํ•œ ๊ฒฝ์šฐ)

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์€ ํˆฌ๋ช…ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์žฌ์‹œ์ž‘์ด๋‚˜ ๋‹ค๋ฅธ ์˜ํ–ฅ์ด ์—†๋Š” ๋ด‡ ์ธ์Šคํ„ด์Šค์˜ ์ค‘์ง€ ์—†์ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ASF์˜ ํ•ต์‹ฌ config์ธ ASF.json์„ ์ˆ˜์ •ํ•˜๋ฉด (AutoRestart๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ) ASF๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ •ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด config ํด๋” ๋‚ด ํŒŒ์ผ ๋ณ€๊ฒฝ์— ASF๊ฐ€ ๋ฐ˜์‘ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ, --no-config-watch **๋ช…๋ น์ค„ ์ธ์ˆ˜**๋กœ ์ด ๋™์ž‘์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

en-US de-DE es-ES lol-US
pt-BR ru-RU zh-CN zh-TW

๐Ÿ‘จโ€๐Ÿซ ๊ธฐ๋ณธ

๐Ÿ‘จโ€๐ŸŽ“๏ธ ๋ฉ”์ธ

๐Ÿง™ ๊ณ ๊ธ‰

๐Ÿ‘ท ๊ฐœ๋ฐœ์ž

Clone this wiki locally