Skip to content

Configuration ko KR

ArchiBot edited this page Aug 5, 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 versions often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don't consider yourself advanced user, please stay with default 1 (Stable) update channel. PreRelease channel is dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ASF์˜ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ๋ฒ„์ „ํ™•์ธ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด UpdateChannel์„ 0(์—†์Œ(None))์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. UpdateChannel์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด update ๋ช…๋ น์„ ํฌํ•จํ•œ ์—…๋ฐ์ดํŠธ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ UpdatePeriod ์„ค๋ช…์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฌธ์ œ์— ๋…ธ์ถœ๋˜๋ฏ€๋กœ ์—†์Œ(None) ์ฑ„๋„์€ ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

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


UpdatePeriod

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

Update process of ASF involves update of entire folder structure that ASF is using, but without touching your own configs or databases located in config directory - this means that any extra files unrelated to ASF in its directory can be lost during update. ๊ธฐ๋ณธ๊ฐ’์ธ 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์„ ๋„˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

In general, lowering WebLimiterDelay under default value is strongly discouraged as it could lead to various IP-related blocks, some of which are possible to be permanent. ๊ธฐ๋ณธ๊ฐ’์€ ์„œ๋ฒ„์—์„œ ๋‹จ์ผ ASF ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ๋„ ์ถฉ๋ถ„ํ•˜๊ณ , ์›๋ณธ Steam ํด๋ผ์ด์–ธํŠธ์™€ ํ•จ๊ป˜ ASF๋ฅผ ์ •์ƒ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. It should be correct for majority of usages, and you should only increase it (never lower it). ์ฆ‰, ๋‹จ์ผ IP์—์„œ ๋‹จ์ผ Steam ๋„๋ฉ”์ธ์œผ๋กœ ๋ณด๋‚ด์ง€๋Š” ๋ชจ๋“  ์š”์ฒญ์˜ ์ „์ฒด ์ˆซ์ž๋Š” ์ ˆ๋Œ€ 300 ms ๋‹น 1๊ฐœ ์š”์ฒญ์„ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

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


WebProxy

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. This property defines a web proxy address that will be used for internal http-related communication, especially to services such as github.com, api.steampowered.com, steamcommunity.com and store.steampowered.com. It applies to general (non-bot specific) communication, as well as bot-specific communication if their equivalent WebProxy configuration property is not set. Proxying ASF requests could be exceptionally useful for bypassing various kinds of firewalls, especially the great firewall in China.

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

A URI string is composed of a scheme (supported: http/https/socks4/socks4a/socks5), a host, and an optional port. ๋‹ค์Œ์€ ์™„์ „ํ•œ uri ๋ฌธ์ž์—ด์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. "http://contoso.com:8080".

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

If you require proxying internal Steam network communication (CMs) as well, then you should ensure to configure SteamProtocols bot's property to a value that allows only websocket transport, i.e. a value of 4, as only websockets are supported for proxying.

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


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) No special bot behaviour, sane default settings
1 ์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidFriendInvites) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ ์ดˆ๋Œ€๋ฅผ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
2 ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ๊ฑฐ์ ˆ(RejectInvalidTrades) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ ์ œ์•ˆ์„ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
4 ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน ์ดˆ๋Œ€ ๊ฑฐ์ ˆ(RejectInvalidGroupInvites) ASF๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน ์ดˆ๋Œ€๋ฅผ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.(๋ฌด์‹œ ์•„๋‹˜)
8 ๋ณด๊ด€ํ•จ ์•Œ๋ฆผ ํ•ด์ œ(DismissInventoryNotifications) ASF๊ฐ€ ๋ชจ๋“  ๋ณด๊ด€ํ•จ ์•Œ๋ฆผ์„ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
16 ๋ฐ›์€ ๋ฉ”์‹œ์ง€ ์ฝ์€์ƒํƒœ๋กœ ํ‘œ์‹œ(MarkReceivedMessagesAsRead) ASF๊ฐ€ ๋ชจ๋“  ๋„์ฐฉํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฝ์€ ์ƒํƒœ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
32 MarkBotMessagesAsRead Will cause ASF to automatically mark messages from other ASF bots (running in the same instance) as read
64 DisableIncomingTradesParsing Will cause ASF to never process incoming trade offers

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Check out json mapping if you'd like to learn more. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

In general you want to modify this property if you expect to change various automation settings related to bot's activity. The default settings involve ASF running in non-invasive mode, which enables only beneficial automation that does not go against user's will.

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

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

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

DismissInventoryNotifications is extremely useful when you start getting annoyed by constant Steam notification about receiving new items. ์ด ์•Œ๋ฆผ์€ Steam ํด๋ผ์ด์–ธํŠธ์— ๋‚ด์žฅ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ASF๊ฐ€ ์ด ์•Œ๋ฆผ์„ ์—†์•จ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์•Œ๋ฆผ์„ ๋ฐ›์€ ํ›„ ์ด๋ฅผ ์ž๋™์œผ๋กœ ํด๋ฆฌ์–ด ํ•  ์ˆ˜๋Š” ์žˆ์œผ๋ฉฐ, "์ƒˆ๋กœ์šด ๋ณด๊ด€ํ•จ ํ•ญ๋ชฉ" ์•Œ๋ฆผ์„ ๋†”๋‘์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. If you expect to evaluate yourself all received items (especially cards farmed with ASF), then naturally you shouldn't enable this option. ๋ฏธ์ณ๊ฐ€๊ณ  ์žˆ๋‹ค๋ฉด ์ด ์˜ต์…˜์ด ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

MarkReceivedMessagesAsRead will automatically mark all messages being received by the account on which ASF is running, both private and group, as read. ์ด๋Š” ๋ณดํ†ต ๋ถ€๊ณ„์ •์—์„œ ASF ๋ช…๋ น์–ด ์ˆ˜ํ–‰์ค‘์— ์ž์‹ ์ด ๋ณด๋‚ธ "์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€"๋ฅผ ํด๋ฆฌ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์˜คํ”„๋ผ์ธ์ด์ง€๋งŒ ASF๋Š” ์—ฌ์ „ํžˆ ์•Œ๋ฆผ์„ ํ•ด์ œํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ์„ ์ž˜๋ผ๋‚ด๋ฒ„๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š๋Š” ํ•œ, ์ด ์˜ต์…˜์„ ์ฃผ ๊ณ„์ •์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

MarkBotMessagesAsRead works in a similar manner by marking only bot messages as read. However, keep in mind that when using that option on group chats with your bots and other people, Steam implementation of acknowledging chat message also acknowledges all messages that happened before the one you decided to mark, so if by any chance you don't want to miss unrelated message that happened in-between, you typically want to avoid using this feature. Obviously, it's also risky when you have multiple primary accounts (e.g. from different users) running in the same ASF instance, as you can also miss their normal out-of-ASF messages.

DisableIncomingTradesParsing will stop ASF from parsing incoming trade offers, this means that whole trading functionality related to that will be non-operative. Since ASF works in the least invasive mode by default, accepting only trade offers from Master users and above, never touching other trade offers - incoming trades parsing is enabled by default. This setting makes the most sense for people that would like to ensure no additional requests/overhead related to trades parsing, disabling whole logic in process, for example because they know that their bots will never receive master trade requests, and therefore do not require ASF participating in their trading activity at all. Keep in mind that having this option specified will disable all other options that depend on incoming trades as well, such as AcceptDonations or SteamTradeMatcher - custom plugins will also be unable to process incoming trade offers in usual way.

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


CompleteTypesToSend

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. When ASF is done with completing a given set of item types specified here, it can automatically send steam trade with all finished sets to the user with Master permission, which is very convenient if you'd like to utilize given bot account for e.g. STM matching, while moving finished sets to some other account. This option works the same as loot command, therefore keep in mind that it requires user with Master permission set, you may also need a valid SteamTradeToken, as well as using an account that is eligible for trading in the first place.

As of today, the following item types are supported in this setting:

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

Please note that regardless of the settings above, ASF will only ask for Steam community items (appID of 753, contextID of 6), so all game items, gifts and likewise, are excluded from the trade offer by definition.

Due to additional overhead of using this option, it's recommended to use it only on bot accounts that have a realistic chance of finishing sets on their own - for example, it makes no sense to activate if you're already using SendOnFarmingFinished preference in FarmingPreferences, SendTradePeriod or loot command on usual basis.

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


CustomGamePlayedWhileFarming

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ๋†์‚ฌ๋ฅผ ์ง“๋Š” ๋™์•ˆ ํ˜„์žฌ ๋†์‚ฌ์ง“๋Š” ๊ฒŒ์ž„ ๋Œ€์‹  "CustomGamePlayedWhileFarming์„ ํ”Œ๋ ˆ์ด์ค‘"์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ž์‹ ์ด ๋†์‚ฌ๋ฅผ ์ง“๋Š” ์ค‘์ด๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ณ ๋Š” ์‹ถ์ง€๋งŒ ๊ธฐ๋ณธ OnlineStatus๋ฅผ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” Steam ๋„คํŠธ์›Œํฌ์˜ ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ, ํ˜น์€ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. In particular, custom name will not display in Complex farming algorithm if ASF fills all 32 slots with games requiring hours to be bumped. ๊ธฐ๋ณธ๊ฐ’ null์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.

ASF provides a few special variables that you can optionally use in your text. {0} will be replaced by ASF with AppID of currently farmed game(s), while {1} will be replaced by ASF with GameName of currently farmed game(s).


CustomGamePlayedWhileIdle

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. CustomGamePlayedWhileFarming์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋†์‚ฌ๊ฐ€ ๋๋‚œ ๊ณ„์ • ๋“ฑ ASF๊ฐ€ ํ•  ์ผ์ด ์—†์„ ๊ฒฝ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” Steam ๋„คํŠธ์›Œํฌ์˜ ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ, ํ˜น์€ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. If you're using GamesPlayedWhileIdle together with this option, then keep in mind that GamesPlayedWhileIdle get priority, therefore you can't declare more than 31 of them, as otherwise CustomGamePlayedWhileIdle will not be able to occupy the slot for custom name. ๊ธฐ๋ณธ๊ฐ’ null์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.


Enabled

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


FarmingOrders

ImmutableList<byte> type with default value of being empty. ์ด ์†์„ฑ๊ฐ’์€ ํ•ด๋‹น ๋ด‡ ๊ณ„์ •์—์„œ 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 ์ธก์˜ ์ผ์‹œ์ ์ธ, ํ˜น์€ ์‹ฌ์ง€์–ด ์˜๊ตฌ์ ์ธ ์ฐจ๋‹จ๊ณผ ๊ฐ™์€ ์›์น˜ ์•Š๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Therefore, we warn you in advance and we're offering this option with absolutely no guarantees, you're using it at your own risk.

AutoUnpackBoosterPacks will automatically unpack all booster packs upon receiving new items notification. This will allow you to immediately acquire additional card drops, which might be wanted scenario especially in combination with other options (e.g. SteamTradeMatcher or CompleteTypesToSend).


GamesPlayedWhileIdle

ImmutableHashSet<uint> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ASF๊ฐ€ ๋†์‚ฌ์ง€์„ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ๋Œ€์‹  ํŠน์ • ๊ฒŒ์ž„(appIDs)์„ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ”Œ๋ ˆ์ดํ•˜๋ฉด "ํ”Œ๋ ˆ์ดํ•œ ์‹œ๊ฐ„"์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒŒ ๋์ž…๋‹ˆ๋‹ค. In order for this feature to work properly, your Steam account must own a valid license to all the appIDs that you specify here, this includes F2P games as well. ์ด ๊ธฐ๋Šฅ์€ Steam ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ์ž์ •์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด์„œ ์„ ํƒํ•œ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•˜๊ธฐ ์œ„ํ•ด CustomGamePlayedWhileIdle์™€ ๋™์‹œ์— ํ™œ์„ฑํ™” ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ CustomGamePlayedWhileFarming์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์‹ค์ œ ํ‘œ์‹œ ์ˆœ์„œ๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Steam์€ ASF๊ฐ€ ์ด 32๊ฐœ์˜ appIDs๋ฅผ ํ”Œ๋ ˆ์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๋ฝํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ๊ฐ’์— ๊ทธ๋งŒํผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


GamingDeviceType

ushort type with default value of 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 Special items that can be used on Steam chat
11 ChatEffect Special items that can be used on Steam chat
12 MiniProfileBackground Special background for Steam profile
13 AvatarProfileFrame Special avatar frame for Steam profile
14 AnimatedAvatar Special animated avatar for Steam profile
15 KeyboardSkin Special keyboard skin for Steam deck
16 StartupVideo Special startup video for Steam deck

Please note that regardless of the settings above, ASF will only ask for Steam community items (appID of 753, contextID of 6), so all game items, gifts and likewise, are excluded from the trade offer by definition.

Default ASF setting is based on the most common usage of the bot, with looting only booster packs, and trading cards (including foils). ์—ฌ๊ธฐ ์ •์˜๋œ ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์„ ๋งŒ์กฑ์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ์–ด๋–ป๊ฒŒ๋“  ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํƒ€์ž…์€ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œ๋จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. Valve๊ฐ€ ์ƒˆ๋กœ์šด Steam ์•„์ดํ…œ์„ ๋‚ด๋†“์•˜์„๋•Œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ, ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ASF์—์„œ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ๋งŒ์•ฝ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ๊นจ์ ธ์„œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด ASF๋Š” ์ „์ฒด ๋ณด๊ด€ํ•จ์„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์œผ๋กœ ๋ณด๋‚ผ๊ฒƒ์ด๋ผ๋Š” ์ ๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€์•Š๋Š” ํ•œ, ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ LootableTypes์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. My strong suggestion is to not include Unknown type in the LootableTypes, even if you expect to loot everything (else).


MachineName

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF will use this property when logging in to Steam network, which can be used for customization in regards to how exactly Steam will display ASF machine and session, e.g. when displaying devices that are currently logged in here.

ASF provides a few special variables that you can optionally use in your text. {0} will be replaced by machine name as provided by your OS, {1} will be replaced by ASF's public identifier, while {2} will be replaced by ASF's version.

Unless you know what you're doing, you should keep it with default value of null. In this case, ASF will decide internally about the proper value, which is {0} ({1}/{2}) as of today. Keep in mind that this is only a suggestion that Steam network may, or may not, respect in full.


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) Special items that can be used on Steam chat
11 ์ฑ„ํŒ… ํšจ๊ณผ(ChatEffect) Special items that can be used on Steam chat
12 MiniProfileBackground Special background for Steam profile
13 AvatarProfileFrame Special avatar frame for Steam profile
14 AnimatedAvatar Special animated avatar for Steam profile
15 KeyboardSkin Special keyboard skin for 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 Assume that BadActivationCode keys are equal to CannotRedeemCodeFromClient, and therefore try to redeem them as wallet keys

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Check out json mapping if you'd like to learn more. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Forwarding will cause bot to forward a key that is not possible to redeem, to another connected and logged on bot that is missing that particular game (if possible to check). The most common situation is forwarding AlreadyPurchased game to another bot that is missing that particular game, but this option also covers other scenarios, such as DoesNotOwnRequiredApp, RateLimited or RestrictedCountry.

Distributing will cause bot to distribute all received keys among itself and other bots. This means that every bot will get a single key from the batch. Typically this is used only when you're redeeming many keys for the same game, and you want to evenly distribute them among your bots, as opposed to redeeming keys for various different games. This feature makes no sense if you're redeeming only one key in a single redeem action (as there are no extra keys to be distributed).

KeepMissingGames will cause bot to skip Forwarding when we can't be sure if key being redeemed is in fact owned by our bot, or not. This basically means that Forwarding will apply only to AlreadyPurchased keys, instead of covering also other cases such as DoesNotOwnRequiredApp, RateLimited or RestrictedCountry. Typically you want to use this option on primary account, to ensure that keys being redeemed on it won't be forwarded further if your bot for example becomes temporarily RateLimited. As you can guess from the description, this field has absolutely no effect if Forwarding is not enabled.

AssumeWalletKeyOnBadActivationCode will cause BadActivationCode keys to be treated as CannotRedeemCodeFromClient, and therefore result in ASF trying to redeem them as wallet keys. This is needed because Steam might announce wallet keys as BadActivationCode (and not CannotRedeemCodeFromClient as it used to), resulting in ASF never attempting to redeem them. However, we recommend against using this preference, as it'll result in ASF trying to redeem every invalid key as a wallet code, resulting in excessive amount of (potentially invalid) requests sent to the Steam service, with all the potential consequences. Instead, we recommend to use ForceAssumeWalletKey redeem^ mode while knowingly redeeming wallet keys, which will enable the needed workaround only when it's required, on as-needed basis.

Enabling both Forwarding and Distributing will add distributing feature on top of forwarding one, which makes ASF trying to redeem one key on all bots firstly (forwarding) before moving to the next one (distributing). Typically you want to use this option only when you want Forwarding, but with altered behaviour of switching the bot on key being used, instead of always going in-order with every key (which would be Forwarding alone). This behaviour can be beneficial if you know that majority or even all of your keys are tied to the same game, because in this situation Forwarding alone would try to redeem everything on one bot firstly (which makes sense if your keys are for unique games), and Forwarding + Distributing will switch the bot on the next key, "distributing" the task of redeeming new key onto another bot than the initial one (which makes sense if keys are for the same game, skipping one pointless attempt per key).

The actual bots order for all of the redeeming scenarios is alphabetical, excluding bots that are unavailable (not connected, stopped or likewise). Please keep in mind that there is per-IP and per-account hourly limit of redeeming tries, and every redeem try that didn't end with OK contributes to failed tries. ASF will do its best to minimize number of AlreadyPurchased failures, e.g. by trying to avoid forwarding a key to another bot that already owns that particular game, but it's not always guaranteed to work due to how Steam is handling licenses. Using redeeming flags such as Forwarding or Distributing will always increase your likelyhood to hit RateLimited.

Also keep in mind that you can't forward or distribute keys to bots that you do not have access to. This should be obvious, but ensure that you're at least Operator of all the bots you want to include in your redeeming process, for example with status ASF command.


RemoteCommunication

byte flags ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 3์ž…๋‹ˆ๋‹ค. This property defines per-bot ASF behaviour when it comes to communication with remote, third-party services, and is defined as below:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) No allowed third-party communication, rendering selected ASF features unusable
1 SteamGroup Allows communication with ASF's Steam group
2 PublicListing Allows communication with ASF's STM listing in order to being listed, if user has also enabled SteamTradeMatcher in TradingPreferences

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Check out json mapping if you'd like to learn more. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

This option doesn't include every third-party communication offered by ASF, only those that are not implied by other settings. For example, if you've enabled ASF's auto-updates, ASF will communicate with both GitHub (for downloads) and our server (for checksum verification), as per your configuration. Likewise, enabling MatchActively in TradingPreferences implies communication with our server to fetch listed bots, which is required for that functionality.

Further explanation on this subject is available in remote communication section. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SendTradePeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. This property works very similar to SendOnFarmingFinished preference in FarmingPreferences, with one difference - instead of sending trade when farming is done, we can also send it every SendTradePeriod hours, regardless of how much we have to farm left. ๋ถ€๊ณ„์ •์˜ ๋†์‚ฌ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ํ‰์†Œ์— ๋ฃจํŒ… ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 0์€ ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ด‡์ด ๋งค์ผ ๊ฑฐ๋ž˜๋ฅผ ๋ณด๋‚ด๊ธธ ์›ํ•œ๋‹ค๋ฉด ์—ฌ๊ธฐ์— 24๋ฅผ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.

Typically you'll want to use ASF 2FA together with this feature, although it's not a requirement if you intend to handle 2FA confirmations manually in timely fashion. ์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 0์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.


SteamLogin

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์ด Steam์— ๋กœ๊ทธ์ธํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Steam ๋กœ๊ทธ์ธ ์•„์ด๋””๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. In addition to defining steam login here, you may also keep default value of null if you want to enter your steam login on each ASF startup instead of putting it in the config. This may be useful for you if you don't want to save sensitive data in config file.


SteamMasterClanID

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


SteamParentalCode

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. This property defines your steam parental PIN. ASF requires an access to resources protected by steam parental, therefore if you use that feature, you should provide ASF with parental unlock PIN, so it can operate normally. Default value of null means that there is no steam parental PIN required to unlock this account, and this is probably what you want if you don't use steam parental functionality.

In limited circumstances, ASF is also able to generate a valid Steam parental code itself, although that requires excessive amount of OS resources and additional time to complete, not to mention that it's not guaranteed to succeed, therefore we recommend to not rely on that feature and instead put valid SteamParentalCode in the config for ASF to use. If ASF determines that PIN is required, and it'll be unable to generate one on its own, it'll ask you for input.


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

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์ด Steam์— ๋กœ๊ทธ์ธํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Steam ์•”ํ˜ธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. In addition to defining steam password here, you may also keep default value of null if you want to enter your steam password on each ASF startup instead of putting it in the config. This may be useful for you if you don't want to save sensitive data in config file.


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) No special permission, this is mainly a reference value that is assigned to steam IDs missing in this dictionary - there is no need to define anybody with this permission
1 ๊ฐ€์กฑ ๊ณต์œ (FamilySharing) ๊ฐ€์กฑ ๊ณต์œ  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ ‘๊ทผ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋˜ํ•œ ์ฐธ์กฐ์šฉ ๊ฐ’์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•œ Steam ID๋ฅผ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2 ์šด์˜์ž(Operator) ์ฃผ๋กœ ๋ผ์ด์„ ์Šค ์ถ”๊ฐ€์™€ ํ‚ค ๋“ฑ๋ก๊ณผ ๊ฐ™์€ ๋ด‡ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
3 ์ฃผ์ธ(Master) ๋ด‡ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์ฒด ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์†์„ฑ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ถŒํ•œ์€ ASF ๋ช…๋ น์–ด ์— ์ ‘๊ทผํ•  ๋•Œ ์ค‘์š”ํ•˜์ง€๋งŒ, ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋งŽ์€ ASF ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š”๋ฐ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. For example you may want to set your own account as Master, and give Operator access to 2-3 of your friends so they can easily redeem keys for your bot with ASF, while not being eligible e.g. for stopping it. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ์‰ฝ๊ฒŒ ์ค„์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹น์‹ ์˜ ๋ด‡์„ ํŠน์ •ํ–‰๋™์„ ํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ํ•œ ์‚ฌ์šฉ์ž๋งŒ์„ ์ฃผ์ธ(Master)์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋งŒํผ์„ ์šด์˜์ž(Operator) ๋ฐ ๊ทธ ์ดํ•˜๋กœ ์„ค์ •ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. While it's technically possible to set multiple Masters and ASF will work correctly with them, for example by accepting all of their trades sent to the bot, ASF will use only one of them (with lowest steam ID) for every action that requires a single target, for example a loot request, so also properties like SendOnFarmingFinished preference in FarmingPreferences or SendTradePeriod. If you perfectly understand those limitations, especially the fact that loot request will always send items to the Master with lowest steam ID, regardless of the Master that actually executed the command, then you can define multiple users with Master permission here, but we still recommend a single master scheme.

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


TradeCheckPeriod

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 60์ž…๋‹ˆ๋‹ค. Normally ASF handles incoming trade offers right after receiving notification about one, but sometimes because of Steam glitches it can't do it at that time, and such trade offers remain ignored until next trade notification or bot restart occurs, which may lead to trades being cancelled or items not available at that later time. If this parameter is set to a non-zero value, ASF will additionally check for such outstanding trades every TradeCheckPeriod minutes. Default value is selected with balance between additional requests to steam servers and losing incoming trades in mind. However, if you are just using ASF to farm cards, and don't plan to automatically process any incoming trades, you may set it to 0 to disable this feature completely. On the other hand, if your bot participates in public ASF's STM listing or provides other automated services as a trade bot, you may want to decrease this parameter to 15 minutes or so, to process all trades in a timely manner.


TradingPreferences

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

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

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Check out json mapping if you'd like to learn more. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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


TransferableTypes

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1, 3, 5 Steam ์•„์ดํ…œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. This property defines which Steam item types will be considered for transfering between bots, during transfer command. 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 Special items that can be used on Steam chat
11 ChatEffect Special items that can be used on Steam chat
12 MiniProfileBackground Special background for Steam profile
13 AvatarProfileFrame Special avatar frame for Steam profile
14 AnimatedAvatar Special animated avatar for Steam profile
15 KeyboardSkin Special keyboard skin for Steam deck
16 StartupVideo Special startup video for Steam deck

Please note that regardless of the settings above, ASF will only ask for Steam community items (appID of 753, contextID of 6), so all game items, gifts and likewise, are excluded from the trade offer by definition.

Default ASF setting is based on the most common usage of the bot, with transfering only booster packs, and trading cards (including foils). ์—ฌ๊ธฐ ์ •์˜๋œ ์†์„ฑ๊ฐ’์€ ๋‹น์‹ ์„ ๋งŒ์กฑ์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ์–ด๋–ป๊ฒŒ๋“  ํ–‰๋™์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์— ์ •์˜๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํƒ€์ž…์€ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์œผ๋กœ ํ‘œ์‹œ๋จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. Valve๊ฐ€ ์ƒˆ๋กœ์šด Steam ์•„์ดํ…œ์„ ๋‚ด๋†“์•˜์„๋•Œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ, ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ASF์—์„œ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ๋งŒ์•ฝ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ๊นจ์ ธ์„œ ๋ชจ๋“  ์•„์ดํ…œ์„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด ASF๋Š” ์ „์ฒด ๋ณด๊ด€ํ•จ์„ ๊ฑฐ๋ž˜ ์ œ์•ˆ์œผ๋กœ ๋ณด๋‚ผ๊ฒƒ์ด๋ผ๋Š” ์ ๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€์•Š๋Š” ํ•œ, ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ TransferableTypes์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์ „์†กํ•˜๊ณ  ์‹ถ๋”๋ผ๋„ ์•Œ ์ˆ˜ ์—†์Œ(Unknown) ํƒ€์ž…์„ TransferableTypes์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


UseLoginKeys

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. This property defines if ASF should use login keys mechanism for this Steam account. Login keys mechanism works very similar to official Steam client's "remember me" option, which makes it possible for ASF to store and use temporary one-time use login key for next logon attempt, effectively skipping a need of providing password, Steam Guard or 2FA code as long as our login key is valid. Login key is stored in BotName.db file and updated automatically. This is why you don't need to provide password/SteamGuard/2FA code after logging in successfully with ASF just once.

Login keys are used by default for your convenience, so you don't need to input SteamPassword, SteamGuard or 2FA code (when not using ASF 2FA) on each login. It's also superior alternative since login key can be used only for a single time and does not reveal your original password in any way. Exactly the same method is being used by your original Steam client, which saves your account name and login key for your next logon attempt, effectively being the same as using SteamLogin with UseLoginKeys and empty SteamPassword in ASF.

However, some people could be concerned even about this little detail, therefore this option is available here for you if you'd like to ensure that ASF won't store any kind of token that would allow resuming previous session after being closed, which will result in full authentication being mandatory on each login attempt. Disabling this option will work exactly the same as not checking "remember me" in official Steam client. Unless you know what you're doing, you should keep it with default value of true.


UserInterfaceMode

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. This property specifies user interface mode that the bot will be announced with after logging in to the Steam network. It might influence how the account is visible e.g. on the Steam chat, if your presence allows that through OnlineStatus. Currently you can choose one of below modes:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 VGUI Default Steam client mode
1 Tenfoot Big picture mode
2 Mobile Steam mobile app
3 Web Web browser session
5 MobileChat Steam mobile chat app

The underlying EUIMode type that this property is based on includes more available values, however, to the best of our knowledge they have absolutely no effect as of today, therefore they were cut for visibility. Also, you might be interested in checking GamingDeviceType, since some additional features are enabled there.

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


WebProxy

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. This property defines a web proxy address that will be used for bot-specific internal http-related communication, especially to services such as api.steampowered.com, steamcommunity.com and store.steampowered.com. If not set, ASF will use global WebProxy setting specified above instead. Proxying ASF requests could be exceptionally useful for bypassing various kinds of firewalls, especially the great firewall in China.

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

A URI string is composed of a scheme (supported: http/https/socks4/socks4a/socks5), a host, and an optional port. ๋‹ค์Œ์€ ์™„์ „ํ•œ uri ๋ฌธ์ž์—ด์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. "http://contoso.com:8080".

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

If you require proxying internal Steam network communication (CMs) as well, then you should ensure to configure SteamProtocols bot's property to a value that allows only websocket transport, i.e. a value of 4, as only websockets are supported for proxying.

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


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 automatically manages this file for you, but you can further tweak ASF logging module if you're advanced user.

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

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

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

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

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

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

BotName.keys is a special file that can be used for importing keys into background games redeemer. ์ด ํŒŒ์ผ์€ ํ•„์ˆ˜์‚ฌํ•ญ๋„ ์•„๋‹ˆ๊ณ  ์ƒ์„ฑ๋˜์ง€๋„ ์•Š์ง€๋งŒ ASF๊ฐ€ ์ธ์‹์€ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ‚ค๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋‹ค์Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

BotName.maFile is a special file that can be used for importing 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 ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์–ด๋– ํ•œ ์ผ๋ จ์˜ ๋ฌธ์ž๋ฅผ ๋ฐ›๋Š” ๋ฌธ์ž์—ด ํƒ€์ž…์ž…๋‹ˆ๋‹ค. Empty sequence and null value are treated the same by ASF, so it's up to your preference which one you want to use (we stick with null).

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


Guid? - Nullable UUID type, in JSON encoded as string. UUID is made out of 32 hexadecimal characters, in range from 0 to 9 and a to f. ASF accepts variety of valid formats - lowercase, uppercase, with and without dashes. In addition to valid UUID, since this property is nullable, a special value of null is accepted to indicate lack of UUID to provide.

Examples: "LicenseID": null, "LicenseID": "f6a0529813f74d119982eb4fe43a9a24"


ImmutableList<valueType> - Immutable collection (list) of values in given valueType. JSON์—์„œ๋Š” ์ฃผ์–ด์ง„ valueType์„ ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF uses List to indicate that given property supports multiple values and that their order might be relevant.

Example for ImmutableList<byte>: "FarmingOrders": [15, 11, 7]


ImmutableHashSet<valueType> - Immutable collection (set) of unique values in given valueType. JSON์—์„œ๋Š” ์ฃผ์–ด์ง„ valueType์„ ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF uses HashSet to indicate that given property makes sense only for unique values and that their order doesn't matter, therefore it'll intentionally ignore any potential duplicates during parsing (if you happened to supply them anyway).

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


ImmutableDictionary<keyType, valueType> - Immutable dictionary (map) that maps a unique key specified in its keyType, to value specified in its valueType. JSON์—์„œ๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋œ ์˜ค๋ธŒ์ ํŠธ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ keyType๋Š” ์‹ฌ์ง€์–ด ulong๊ฐ™์€ ํƒ€์ž…์ด๋”๋ผ๋„ ํ•ญ์ƒ ๋”ฐ์˜ดํ‘œ๋กœ ํ‘œ์‹œํ•จ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. There is also a strict requirement of the key being unique across the map, this time enforced by JSON as well.

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


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

For example, given following definition:

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

There are exactly 3 meaningful, available flags to switch on/off (A, B, C), and therefore 8 possible valid combinations overall:

Final value Enabled flags
0 ์—†์Œ(None)
1 A
2 B
3 A + B
4 C
5 A + C
6 B + C
7 A + B + C

By definition, in order to make the above possible, each standalone flag must therefore be the power of two. This is why additional flag in above example, D, would need to carry value of 8 or greater.

Usually, graphical tools will do the calculation for you. If you're editing configs manually, you can always use calculator and simply add together underlying values of all the flags you want to enable - like in example above.

Example: "SteamProtocols": 7 (which enables flags with value of 1, 2 and 4, as explained above)


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

Due to JavaScript limitations of being unable to properly serialize simple ulong fields in JSON when using web-based ConfigGenerator, ulong fields will be rendered as strings with s_ prefix in the resulting config. This includes for example "SteamOwnerID": 76561198006963719 that will be written by our ConfigGenerator as "s_SteamOwnerID": "76561198006963719". ASF๋Š” ์ด ๋ฌธ์ž์—ด ๋งคํ•‘์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๋…ผ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ™˜๊ฒฝ์„ค์ •์˜ s_ ํ•ญ๋ชฉ์€ ์‹ค์ œ๋กœ ์œ ํšจํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ™˜๊ฒฝ์„ค์ •์„ ์Šค์Šค๋กœ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ๊ฐ€๋Šฅํ•˜๋ฉด ์›๋ž˜์˜ ulong ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜์ง€๋งŒ ๊ทธ๋Ÿด์ˆ˜ ์—†๋‹ค๋ฉด ์ด๋ฆ„์— s_ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ์„œ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํ•œ๊ณ„๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.


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

It's top priority for ASF to remain compatible with older configs. As you should already know, missing config properties are treated the same as they would be defined with their default values. ๋”ฐ๋ผ์„œ ์ƒˆ ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์ด ASF ์ƒˆ๋ฒ„์ „์— ๋„์ž…๋˜๋ฉด, ๋‹น์‹ ์˜ ๋ชจ๋“  ํ™˜๊ฒฝ์„ค์ •์€ ์ƒˆ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •์˜๋œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ œ๊ฑฐํ•˜๊ณ , ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Due to above, ASF will automatically migrate/optimize your configs by reformatting them and removing fields that hold default value. You can disable this behaviour with --no-config-migrate command-line argument if you have a specific reason, for example you're providing read-only config files and you don't want ASF to modify them.


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

ASF is aware of configs being modified "on-the-fly" - thanks to that, ASF will automatically:

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

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

In addition to that, ASF will also restart itself (if AutoRestart permits) if you modify core ASF ASF.json config. Likewise, program will quit if you delete or rename it.

You can disable this behaviour with --no-config-watch command-line argument if you have a specific reason, for example you don't want from ASF to react to file changes in config folder.

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

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

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

๐Ÿง™ ๊ณ ๊ธ‰

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

Clone this wiki locally