Configuration ko KR - Rudokhvist/ArchiSteamFarm GitHub Wiki

ํ™˜๊ฒฝ์„ค์ •

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


์†Œ๊ฐœ

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

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

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

Configuration can be done in several ways. You can use our Web-based ConfigGenerator, which is a local app independent of ASF. You can use our ASF-ui IPC frontend for configuration done directly in ASF. Lastly, you can always generate config files manually, as they follow fixed JSON structure specified below. We'll explain shortly the available options.


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

The purpose of our Web-based ConfigGenerator is to provide you with a friendly frontend that is used for generating ASF configuration files. ์›น ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ค์ • ์ƒ์„ฑ๊ธฐ๋Š” 100% ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์ž…๋ ฅํ•œ ์„ธ๋ถ€๋‚ด์šฉ์€ ๋‹ค๋ฅธ ์–ด๋””๋กœ๋„ ๋ณด๋‚ด์ง€์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ณด์•ˆ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ  index.html ํŒŒ์ผ์„ ๋‹น์‹ ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์˜คํ”„๋ผ์ธ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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


ASF-ui configuration

Our ASF-ui IPC interface allows you to configure ASF as well, and is superior solution for reconfiguring ASF after generating the initial configs due to the fact that it can edit the configs in-place, as opposed to Web-based ConfigGenerator which generates them statically.

In order to use ASF-ui, you must have our IPC interface enabled itself. IPC is enabled by default starting with ASF V5.1.0.0, therefore you can access it right away, as long as you didn't disable it yourself.

After launching the program, simply navigate to ASF's IPC address. If everything worked properly, you can change ASF configuration from there as well.


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

In general we strongly recommend using either our ConfigGenerator or ASF-ui, as it's much easier and ensures you won't make a mistake in the JSON structure, but if for some reason you don't want to, then you can also create proper configs manually. Check JSON examples below for a good start in proper structure, you can copy the content into a file and use it as a base for your config. Since you're not using any of our frontends, ensure that your config is valid, as ASF will refuse to load it if it can't be parsed. Even if it's a valid JSON, you also have to ensure that all the properties have the proper type, as required by ASF. For proper JSON structure of all available fields, refer to JSON mapping section and our documentation below.


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

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

{
    "AutoRestart": true,
    "Blacklist": [],
    "CommandPrefix": "!",
    "ConfirmationsLimiterDelay": 10,
    "ConnectionTimeout": 90,
    "CurrentCulture": null,
    "Debug": false,
    "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,
    "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๊ฐ€ ์žฌ์‹œ์ž‘์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋ช‡๊ฐ€์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์žฌ์‹œ์ž‘์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ์ž…๋‹ˆ๋‹ค. Most users should be fine with it and keep this property with default value of true, however - if you're running ASF through your own script and/or with dotnet, you may want to have full control over starting the process, and avoid a situation such as having new (restarted) ASF process running somewhere silently in the background, and not in the foreground of the script, that exited together with old ASF process. ์ƒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์ด์ƒ ์ง๊ณ„ ์ฐจ์ผ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์ด ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ์ฝ˜์†” ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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


Blacklist

ImmutableHashSet<uint> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. As the name suggests, this global config property defines appIDs (games) that will be entirely ignored by automatic ASF farming process. ๋ถˆํ–‰ํžˆ๋„ Steam์€ ์—ฌ๋ฆ„/๊ฒจ์šธ ํ• ์ธ ๋ฐฐ์ง€๋ฅผ "์นด๋“œ ํš๋“ ๊ฐ€๋Šฅ"์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF ํ”„๋กœ์„ธ์Šค๋ฅผ ํ˜ผ๋ž€์‹œ์ผœ์„œ ์—ฌ๋ฆ„/๊ฒจ์šธ ํ• ์ธ ๋ฐฐ์ง€๋„ ๋†์‚ฌ์ง€์–ด์•ผ ํ•  ์œ ํšจํ•œ ๊ฒŒ์ž„์œผ๋กœ ๋ฏฟ๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋„ ์—†๋‹ค๋ฉด ASF๋Š” ์‹ค์ œ๋กœ๋Š” ๊ฒŒ์ž„์ด ์•„๋‹Œ ๊ฒŒ์ž„์„ ๋†์‚ฌ์ง“๋Š๋ผ๊ณ  ๊ฒฐ๊ตญ ๋งค๋‹ฌ๋ ค์žˆ์„ ๊ฒƒ์ด๊ณ , ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์นด๋“œ ํš๋“์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ASF์˜ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฐ์ง€๋ฅผ ๋†์‚ฌ์šฉ์ด ์•„๋‹˜์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ์–ด๋–ค ๊ฒƒ์„ ๋†์‚ฌ์ง€์„์ง€ ๊ฒฐ์ •ํ• ๋•Œ ์ด๋“ค์„ ์กฐ์šฉํžˆ ๋ฌด์‹œํ•˜๊ณ  ํ•จ์ •์— ๋น ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋Š” ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.

ASF includes two blacklists by default - SalesBlacklist, which is hardcoded into the ASF code and not possible to edit, and normal Blacklist, which is defined here. SalesBlacklist is updated together with ASF version and typically includes all "bad" appIDs at the time of release, so if you're using up-to-date ASF then you do not need to maintain your own Blacklist defined here. ์ด ์†์„ฑ๊ฐ’์˜ ์ฃผ ๋ชฉ์ ์€ ASF ๋ฆด๋ฆฌ์Šค ์‹œ์ ์— ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ๋†์‚ฌ์ง“์ง€ ๋ง์•„์•ผ ํ•  appID๋ฅผ ๋‹น์‹ ์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Hardcoded SalesBlacklist is being updated as fast as possible, therefore you're not required to update your own Blacklist if you're using latest ASF version, but without Blacklist you'd be forced to update ASF in order to "keep running" when Valve releases new sale badge - I don't want to force you to use latest ASF code, therefore this property is here to allow you "fixing" ASF yourself if you for some reason don't want to, or can't, update to new hardcoded SalesBlacklist in new ASF release, yet you want to keep your old ASF running. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

If you're looking for bot-based blacklist instead, take a look at fb, fbadd and fbrm commands.


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 ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์š”์ฒญ์— ํ—ˆ์šฉ๋˜๋Š” ๋ถ„๋‹จ์œ„ ์ˆซ์ž๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Default value of 90 should be fine for majority of people, however, if you have rather slow network connection or PC, you may want to increase this number to something higher (like 120). ๋” ํฐ ๊ฐ’์ด ๋Š๋ฆฌ๊ฑฐ๋‚˜ ํ˜น์€ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Steam ์„œ๋ฒ„๋ฅผ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์•„๋‹˜์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ผ์„ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋‹ค์Œ์— ๋‹ค์‹œ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์ด์Šˆ๋ฅผ ํƒ์ง€ํ•˜๋Š”๋ฐ ๊ทน๋„์˜ ์ง€์—ฐ๊ณผ ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ASF๊ฐ€ ํŒŒ์‹ฑ์ค‘์ธ ์œ ํšจํ•œ ์š”์ฒญ๋„ ์ทจ์†Œํ•˜๊ฒŒ๋˜์–ด ์ „์ฒด์ ์ธ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Therefore setting this value lower than default has no advantage in general, as Steam servers tend to be super slow from time to time, and could require more time for parsing ASF requests. ๊ธฐ๋ณธ๊ฐ’์€ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ์•ˆ์ •์ ์ด๋ผ๋Š” ๋ฏฟ์Œ๊ณผ Steam ๋„คํŠธ์›Œํฌ๊ฐ€ ์šฐ๋ฆฌ์˜ ์š”์ฒญ์„ ์ฃผ์–ด์ง„ ํƒ€์ž„์•„์›ƒ ๋‚ด์— ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๋Š” ์˜์‹ฌ ์‚ฌ์ด์˜ ๊ท ํ˜•์ ์ž…๋‹ˆ๋‹ค. ์ด์Šˆ๋ฅผ ๋” ๋นจ๋ฆฌ ํƒ์ง€ํ•˜๊ณ  ASF๊ฐ€ ๋” ๋นจ๋ฆฌ ์žฌ์—ฐ๊ฒฐ/๋ฐ˜์‘ํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.(ํ˜น์€ ์•„์ฃผ ์‚ด์ง ๋‚ฎ์€๊ฐ’, 60 ์ •๋„๋ฉด ASF๊ฐ€ ์ฐธ์„์„ฑ์ด ์•ฝ๊ฐ„ ์—†์–ด์ง‘๋‹ˆ๋‹ค.) If you instead notice that ASF is running into network issues, such as failing requests, heartbeats being lost or connection to Steam interrupted, it probably makes sense to increase this value if you're sure that it's not caused by your network, but by Steam itself, as increasing timeouts makes ASF more "patient" and not deciding to reconnect right away.

An example situation that may require increase of this property is letting ASF to deal with a very huge trade offers that can take good 2+ minutes to be fully accepted and handled by Steam. ๊ธฐ๋ณธ ํƒ€์ž„์•„์›ƒ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ASF๋Š” ๋” ์ฐธ์„์„ฑ์ด ์žˆ๊ฒŒ๋˜๊ณ  ๊ฑฐ๋ž˜๊ฐ€ ์„ฑ์‚ฌ๋˜์ง€ ์•Š์•„์„œ ์ตœ์ดˆ ์š”์ฒญ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒฐ์ •์„ ํ•˜๊ธฐ ์ „์— ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

In short, default value should be decent for most cases, but you may want to increase it if needed. ํ•˜์ง€๋งŒ ํƒ€์ž„์•„์›ƒ์„ ํฌ๊ฒŒ ์žก๋Š”๋‹ค๊ณ  ํ•ด์„œ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Steam ์„œ๋ฒ„๋ฅผ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ๊ณ ์น ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’๋ณด๋‹ค ํ•œ์ฐธ ํฌ๊ฒŒํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


CurrentCulture

string ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค. ASF๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์šด์˜์ฒด์ œ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ คํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ทธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญ๋œ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF๋ฅผ ๊ฑฐ์˜ ๋ชจ๋“  ๋Œ€์ค‘์  ์–ธ์–ด๋กœ ํ˜„์ง€ํ™” ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋•๋ถ„์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ๋“  OS๋ฅผ ๋ชจ๊ตญ์–ด๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ์ด ํ™˜๊ฒฝ์„ค์ • ์†์„ฑ๊ฐ’์œผ๋กœ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ์œ ํšจํ•œ ์–ธ์–ด๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ๋ฆฌ์ŠคํŠธ๋Š” MSDN ์„ ๋ฐฉ๋ฌธํ•˜์—ฌ Language tag๋ฅผ ์ฐพ์•„๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. It's nice to note that ASF accepts both specific cultures, such as "en-GB", but also neutral ones, such as "en". Specifying current culture will also affect other culture-specific behaviour, such as currency/date format and alike. Please note that you may need additional font/language packs for displaying language-specific characters properly, if you picked non-native culture that makes use of them. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๋ฅผ ๋ชจ๊ตญ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์˜์–ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด ์†์„ฑ๊ฐ’์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.


Debug

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

WARNING: enabling this mode includes logging of potentially sensitive information such as logins and passwords that you're using for logging in to Steam (due to network logging). That data is written to both debug directory, as well as standard log.txt (that is now intentionally much more verbose to log this info). You should not post debug content generated by ASF in any public location, ASF developer should always remind you of sending it to his e-mail, or other secure location. We're not storing, neither making use of those sensitive details, they're written as part of debug routines since their presence could be relevant to the issue that is affecting you. We'd prefer if you didn't alter ASF logging in any way, but if you're worried, you're free to redact those sensitive details appropriately.

Redacting involves replacing sensitive details, for example with stars. You should refrain from removing sensitive lines entirely, as their pure existence could be relevant and should be preserved.


FarmingDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 15์ž…๋‹ˆ๋‹ค. In order for ASF to work, it will check currently farmed game every FarmingDelay minutes, if it perhaps dropped all cards already. Setting this property too low can result in excessive amount of steam requests being sent, while setting it too high can result in ASF still "farming" given title for up to FarmingDelay minutes after it's fully farmed. Default value should be excellent for most users, but if you have many bots running, you may consider increasing it to something like 30 minutes in order to limit steam requests being sent. It's nice to note that ASF uses event-based mechanism and checks game badge page on each Steam item dropped, so in general we don't even need to check it in fixed time intervals, but as we don't fully trust Steam network - we check game badge page anyway, if we didn't check it through card being dropped event in last FarmingDelay minutes (in case Steam network didn't inform us about item dropped or stuff like that). Assuming that Steam network is working properly, decreasing this value will not improve farming efficiency in any way, while increasing network overhead significantly - it's recommended only to increase it (if needed) from default of 15 minutes. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


FilterBadBots

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. This property defines whether ASF will automatically decline trade offers that are received from known and marked bad actors. In order to do that, ASF will communicate with our server on as-needed basis to fetch a list of blacklisted Steam identificators. The bots listed are operated by people that are classified as harmful towards ASF initiative by us, such as those that violate our code of conduct, use provided functionality and resources by us such as PublicListing in order to abuse and exploit other people, or are doing outright criminal activity such as launching DDoS attacks on the server. Since ASF has strong stance on overall fairness, honesty and cooperation between its users in order to make the whole community thrive, this property is enabled by default, and therefore ASF filters bots that we've classified as harmful from services offered. Unless you have a strong reason to edit this property, such as disagreeing with our statement and intentionally allowing those bots to operate (including exploiting your accounts), you should keep it at default.


GiftsLimiterDelay

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


Headless

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ headless ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ง€๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. When in headless mode, ASF assumes that it's running on a server or in other non-interactive environment, therefore it will not attempt to read any information through console input. This includes on-demand details (account credentials such as 2FA code, SteamGuard code, password or any other variable required for ASF to operate) as well as all other console inputs (such as interactive command console). In other words, Headless mode is equal to making ASF console read-only. This setting is useful mainly for users running ASF on their servers, as instead of asking e.g. for 2FA code, ASF will silently abort the operation by stopping an account. Unless you're running ASF on a server, and you previously confirmed that ASF is able to operate in non-headless mode, you should keep this property disabled. Any user interaction will be denied when in headless mode, and your accounts will not run if they require any console input during starting. This is useful for servers, as ASF can abort trying to log onto the account when asked for credentials, instead of waiting (infinitely) for user to provide those. Enabling this mode will also allow you to use input command which acts as a replacement for standard console input. ์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ false๋กœ ๋‘์‹ญ์‹œ์˜ค.

If you're running ASF on the server, you probably want to use this option together with --process-required command-line argument.


IdleFarmingPeriod

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


InventoryLimiterDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 4์ž…๋‹ˆ๋‹ค. ASF will ensure that there will be at least InventoryLimiterDelay seconds in between of two consecutive inventory requests to avoid triggering rate-limit - those are being used for fetching Steam inventories, especially during your own commands such as loot or transfer. Default value of 4 was set based on fetching inventories of over 100 consecutive bot instances, and should satisfy most (if not all) of the users. You may however want to decrease it, or even change to 0 if you have very low amount of bots, so ASF will ignore the delay and loot steam inventories much faster. Be warned though, as setting it too low will result in Steam temporarily banning your IP, and that will prevent you from fetching your inventory at all. You also may need to increase this value if you're running a lot of bots with a lot of inventory requests, although in this case you should probably try to limit number of those requests instead. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


IPC

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ASF ํ”„๋กœ์„ธ์Šค์™€ ํ•จ๊ป˜ ์‹œ์ž‘๋˜๋Š” IPC ์„œ๋ฒ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. IPC allows for inter-process communication, including usage of ASF-ui, by booting a local HTTP server. If you do not intend to use any third-party IPC integration with ASF, including our ASF-ui, you can safely disable this option. Otherwise, it's a good idea to keep it enabled (default option).


IPCPassword

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


IPCPasswordFormat

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. This property defines the format of IPCPassword property and uses EHashingMethod as underlying type. Please refer to Security section if you want to learn more, as you'll need to ensure that IPCPassword property indeed includes password in matching IPCPasswordFormat. In other words, when you change IPCPasswordFormat then your IPCPassword should be already in that format, not just aiming to be. ๋ฌด์Šจ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


LicenseID

Guid? type with default value of null. This property allows our sponsors to enhance ASF with optional features that require paid resources to work. For now, this allows you to make use of MatchActively feature in ItemsMatcher plugin.

While we recommend you to utilize GitHub since it offers monthly and one-time tiers, as well as allows full automation and gives you immediate access, we also support all other currently-available donation options. See this post for instructions on how to donate using other methods in order to get a manual license valid for given period.

Regardless of the method used, if you're ASF sponsor, you can obtain your license here. You'll need to sign in with GitHub for confirming your identity, we ask only for read-only public information, which is your username. LicenseID is made out of 32 hexadecimal characters, such as f6a0529813f74d119982eb4fe43a9a24.

Ensure that you do not share your LicenseID with other people. Since it's issued on personal basis, it might get revoked if it's leaked. If by any chance this happened to you accidentally, you can generate a new one from the same place.

Unless you want to enable extra ASF functionalities, there is no need for you to provide the license.


LoginLimiterDelay

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค. ASF๋Š” ๋“ฑ๋ก์ œํ•œ์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‘๊ฐœ์˜ ์—ฐ์†๋œ ์—ฐ๊ฒฐ ์‹œ๋„ ์‚ฌ์ด์— ์ ์–ด๋„ LoginLimiterDelay์ดˆ์˜ ๊ฐ„๊ฒฉ์„ ๋‘ก๋‹ˆ๋‹ค. Default value of 10 was set based on connecting over 100 bot instances, and should satisfy most (if not all) of the users. You may however want to increase/decrease it, or even change to 0 if you have very low amount of bots, so ASF will ignore the delay and connect to Steam much faster. Be warned though, as setting it too low while having too many bots will result in Steam temporarily banning your IP, and that will prevent you from logging in at all, with InvalidPassword/RateLimitExceeded error - and that also includes your normal Steam client, not only ASF. Likewise, if you're running excessive number of bots, especially together with other Steam clients/tools using the same IP address, most likely you'll need to increase this value in order to spread logins across longer period of time.

As a side note, this value is also used as load-balancing buffer in all ASF-scheduled actions, such as trades in SendTradePeriod. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MaxFarmingTime

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค. As you should know, Steam is not always working properly, sometimes weird situations can happen such as our playtime not being recorded, despite of, in fact, playing a game. ASF๋Š” ํ•œ ๊ฒŒ์ž„์„ ์†”๋กœ๋ชจ๋“œ๋กœ ์ตœ๋Œ€ MaxFarmingTime ์‹œ๊ฐ„๋™์•ˆ ๋†์‚ฌ์ง€์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ›„์—๋Š” ์™„์ „ํžˆ ๋†์‚ฌ๋ฅผ ์ง€์€๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. This is required to not freeze farming process in case of weird situations happening, but also if for some reason Steam released a new badge that would stop ASF from progressing further (see: Blacklist). Default value of 10 hours should be enough for dropping all steam cards from one game. Setting this property too low can result in valid games being skipped (and yes, there are valid games taking even up to 9 hours to farm), while setting it too high can result in farming process being frozen. Please note that this property affects only a single game in a single farming session (so after going through entire queue ASF will return to that title), also it's not based on total playtime but internal ASF farming time, so ASF will also return to that title after a restart. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MaxTradeHoldDuration

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 15์ž…๋‹ˆ๋‹ค. This property defines maximum duration of trade hold in days that we're willing to accept - ASF will reject trades that are being held for more than MaxTradeHoldDuration days, as defined in trading section. This option makes sense only for bots with TradingPreferences of SteamTradeMatcher, as it doesn't affect Master/SteamOwnerID trades, neither donations. Trade holds are annoying for everyone, and nobody really wants to deal with them. ASF is supposed to work on liberal rules and help everyone, regardless if on trade hold or not - that's why this option is set to 15 by default. However, if you'd instead prefer to reject all trades affected by trade holds, you can specify 0 here. Please consider the fact that cards with short lifespan are not affected by this option and automatically rejected for people with trade holds, as described in trading section, so there is no need to globally reject everybody only because of that. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


MinFarmingDelayAfterBlock

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 60์ž…๋‹ˆ๋‹ค. This property defines minimum amount of time, in seconds, which ASF will wait before resuming cards farming if it got previously disconnected with LoggedInElsewhere, which happens when you decide to forcefully disconnect currently-farming ASF by launching a game. This delay exists mainly for convenience and overhead reasons, for example it allows you to restart the game without having to fight with ASF occupying your account again only because playing lock was available for a split second. Due to the fact that reclaiming the session causes LoggedInElsewhere disconnect, ASF has to go through whole reconnect procedure, which puts additional pressure on the machine and Steam network, therefore avoiding additional disconnects, if possible, is preferable. By default, this is configured at 60 seconds, which should be enough to allow you restart the game without much hassle. However, there are scenarios when you could be interested in increasing it, for example if your network disconnects often and ASF is taking over too soon, which causes being forced to go through the reconnect process yourself. We allow a maximum value of 255 for this property, which should be enough for all common scenarios. In addition to the above, it's also possible to decrease the delay, or even remove it entirely with a value of 0, although that is usually not recommended due to reasons stated above. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


OptimizationMode

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค. This property defines optimization mode which ASF will prefer during runtime. Currently ASF supports two modes - 0 which is called MaxPerformance, and 1 which is called MinMemoryUsage. By default ASF prefers to run as many things in parallel (concurrently) as possible, which enhances performance by load-balancing work across all CPU cores, multiple CPU threads, multiple sockets and multiple threadpool tasks. For example, ASF will ask for your first badge page when checking for games to farm, and then once request arrived, ASF will read from it how many badge pages you actually have, then request each other one concurrently. This is what you should want almost always, as the overhead in most cases is minimal and benefits from asynchronous ASF code can be seen even on the oldest hardware with a single CPU core and heavily limited power. However, with many tasks being processed in parallel, ASF runtime is responsible for their maintenance, e.g. keeping sockets open, threads alive and tasks being processed, which can result in increased memory usage from time to time, and if you're extremely constrained by available memory, you may want to switch this property to 1 (MinMemoryUsage) in order to force ASF into using as little tasks as possible, and typically running possible-to-parallel asynchronous code in a synchronous manner. You should consider switching this property only if you previously read low-memory setup and you intentionally want to sacrifice gigantic performance boost, for a very small memory overhead decrease. Usually this option is much worse than what you can achieve with other possible ways, such as by limiting your ASF usage or tuning runtime's garbage collector, as explained in low-memory setup. Therefore, you should use MinMemoryUsage as a last resort, right before runtime recompilation, if you couldn't achieve satisfying results with other (much better) options. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


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 ์ „์šฉ์ž…๋‹ˆ๋‹ค. This is convenient, as you may want to run bots for your friends, while not allowing them to control ASF process, such as exiting it via exit command. ๊ธฐ๋ณธ๊ฐ’์ธ 0์€ ASF ํ”„๋กœ์„ธ์Šค์˜ ์†Œ์œ ์ž๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์œผ๋กœ, ์ผ๋ฐ˜ ASF ๋ช…๋ น์„ ๋ˆ„๊ตฌ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. Keep in mind that this property applies to Steam chat exclusively, IPC, as well as interactive console, will still allow you to execute Owner commands even if this property is not set.


SteamProtocols

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

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

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

By default ASF will use all available Steam protocols as a measure for fighting with downtimes and other similar Steam issues. ์ผ๋ฐ˜์ ์œผ๋กœ ASF๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ํ”„๋กœํ† ์ฝœ ๋Œ€์‹  ํ•˜๋‚˜๋‚˜ ๋‘๊ฐœ์˜ ํŠน์ • ํ”„๋กœํ† ์ฝœ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฐฉํ™”๋ฒฝ์—์„œ TCP๋งŒ ํ™œ์„ฑํ™”ํ•˜๊ณ  ASF๊ฐ€ UDP๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€ ์•Š๊ธธ ์›ํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ์ˆ˜๋‹จ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํŠน์ • ๋ฌธ์ œ๋‚˜ ์ด์Šˆ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ์ค‘์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ฑฐ์˜ ํ•ญ์ƒ ASF๊ฐ€ ํ•œ๋‘๊ฐœ๊ฐ€ ์•„๋‹Œ ํ˜„์žฌ ์ง€์›๋˜๋Š” ์–ด๋Š ํ”„๋กœํ† ์ฝœ์ด๋“  ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


UpdateChannel

byte ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์€ ์ž๋™ ์—…๋ฐ์ดํŠธ(UpdatePeriod ๊ฐ€ 0๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ)๋‚˜ ์—…๋ฐ์ดํŠธ ์•Œ๋ฆผ์—์„œ ์‚ฌ์šฉํ•  ์—…๋ฐ์ดํŠธ ์ฑ„๋„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ASF๋Š” 3๊ฐœ์˜ ์—…๋ฐ์ดํŠธ ์ฑ„๋„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. 0์€ ์—†์Œ(None), 1์€ ์•ˆ์ •(Stable), ๊ทธ๋ฆฌ๊ณ  2๋Š” ์‹คํ—˜(Experimental)์ž…๋‹ˆ๋‹ค. ์•ˆ์ •(Stable) ์ฑ„๋„์€ ๊ธฐ๋ณธ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„๋กœ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ—˜(Experimental) ์ฑ„๋„์€ ์•ˆ์ •(Stable) ๋ฆด๋ฆฌ์Šค์—, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฒ„๊ทธ์ˆ˜์ •์ด๋‚˜ ๊ณ„ํš๋œ ๊ฐœ์„ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž์™€ ๊ฐœ๋ฐœ์ž์šฉ์ธ ์‚ฌ์ „ ๋ฆด๋ฆฌ์Šค(pre-releases) ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์‹คํ—˜(Experimental) ๋ฒ„์ „์€ ์ข…์ข… ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๋‚˜ ์ž‘์—…์ค‘์ธ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.. ์Šค์Šค๋กœ ๊ณ ๊ธ‰์‚ฌ์šฉ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’ 1์ธ ์•ˆ์ •(Stable) ์ฑ„๋„์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. ์‹คํ—˜(Experimental) ์ฑ„๋„์€ ๋ฒ„๊ทธ๋ฅผ ์ œ๋ณดํ•˜๊ณ , ์ด์Šˆ๋ฅผ ๋‹ค๋ฃจ๋ฉฐ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š” ์‚ฌ์šฉ์ž ์šฉ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ง€์›์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด 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), if - apart from using ASF, you're also using another tool that may send excessive number of requests to the same web-services that ASF is making use of. ์ฆ‰, ๋‹จ์ผ IP์—์„œ ๋‹จ์ผ Steam ๋„๋ฉ”์ธ์œผ๋กœ ๋ณด๋‚ด์ง€๋Š” ๋ชจ๋“  ์š”์ฒญ์˜ ์ „์ฒด ์ˆซ์ž๋Š” ์ ˆ๋Œ€ 300 ms ๋‹น 1๊ฐœ ์š”์ฒญ์„ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

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


WebProxy

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

์ด ์†์„ฑ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์€ 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๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ASF๋Š” http์™€ https ์š”์ฒญ๋งŒ์„ ์œ„ํ•ด ์›น ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ASF์˜ ๋‚ด๋ถ€ Steam ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋‚ด๋ถ€ Steam ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SK2 ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์€ ํ˜„์žฌ๋กœ์จ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹น์‹ ์ด ์ด๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

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


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,
    "AutoSteamSaleEvent": false,
    "BotBehaviour": 0,
    "CompleteTypesToSend": [],
    "CustomGamePlayedWhileFarming": null,
    "CustomGamePlayedWhileIdle": null,
    "Enabled": false,
    "FarmingOrders": [],
    "FarmPriorityQueueOnly": false,
    "GamesPlayedWhileIdle": [],
    "HoursUntilCardDrops": 3,
    "LootableTypes": [1, 3, 5],
    "MatchableTypes": [5],
    "OnlineFlags": 0,
    "OnlineStatus": 1,
    "PasswordFormat": 0,
    "Paused": false,
    "RedeemingPreferences": 0,
    "RemoteCommunication": 3,
    "SendOnFarmingFinished": false,
    "SendTradePeriod": 0,
    "ShutdownOnFarmingFinished": false,
    "SkipRefundableGames": false,
    "SteamLogin": null,
    "SteamMasterClanID": 0,
    "SteamParentalCode": null,
    "SteamPassword": null,
    "SteamTradeToken": null,
    "SteamUserPermissions": {},
    "TradeCheckPeriod": 60,
    "TradingPreferences": 0,
    "TransferableTypes": [1, 3, 5],
    "UseLoginKeys": true,
    "UserInterfaceMode": 0
}

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

AcceptGifts

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

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


AutoSteamSaleEvent

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. Steam์˜ ์—ฌ๋ฆ„/๊ฒจ์šธ ์„ธ์ผ ์ด๋ฒคํŠธ ๊ธฐ๊ฐ„๋™์•ˆ Steam์€ ๋งค์ผ ๋งž์ถค ๋Œ€๊ธฐ์—ด์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ ํ–‰๋™์„ ํ•˜๋ฉด ์ถ”๊ฐ€๋กœ ์นด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ASF๋Š” ์ž๋™์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ํ•œ์ง€ ํ•œ์‹œ๊ฐ„์•ˆ์— ์‹œ์ž‘ํ•˜์—ฌ 8์‹œ๊ฐ„๋งˆ๋‹ค Steam ๋งž์ถค ๋Œ€๊ธฐ์—ด์„ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•˜๋‹ค๋ฉด ํด๋ฆฌ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ–‰๋™์„ ์ง์ ‘ํ•˜๊ธฐ ์›ํ•œ๋‹ค๋ฉด ์ด ์˜ต์…˜์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ด‡ ๊ณ„์ •์—๋งŒ ๋งž๋Š” ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฒ˜์Œ์œผ๋กœ ์ด ์นด๋“œ๋ฅผ ๋ฐ›๊ธฐ ์›ํ•œ๋‹ค๋ฉด ๊ณ„์ •์ด ์ ์–ด๋„ 8 ๋ ˆ๋ฒจ ์ด์ƒ์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Steam์˜ ์ง์ ‘ ์š”๊ตฌ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹์ง€ ๋ถˆํ™•์‹คํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ false๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

Valve์˜ ์ด์Šˆ, ๋ณ€ํ™”, ๋ฌธ์ œ์— ๋”ฐ๋ผ ์ด ๊ธฐ๋Šฅ์ด ์ •์ƒ์ž‘๋™ํ• ์ง€ ๋ณด์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์˜ต์…˜์ด์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜๊ณผ ๊ด€๋ จํ•œ ์–ด๋– ํ•œ ๋ฒ„๊ทธ ์ œ๋ณด, ์ง€์› ์š”์ฒญ๋„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด์ฆ์„ ์ „ํ˜€ ํ•˜์ง€ ์•Š๊ณ  ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ, ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


BotBehaviour

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

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) ํŠน๋ณ„ํ•œ ํ–‰๋™ ์—†์Œ, ๊ฐ€์žฅ ๋œ ๊ณต๊ฒฉ์ ์ธ ๋ชจ๋“œ, ๊ธฐ๋ณธ๊ฐ’
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

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

์ผ๋ฐ˜์ ์œผ๋กœ ASF๊ฐ€ ํ™œ๋™๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ผ์ •๋Ÿ‰ ๋งŒํผ์˜ ์ž๋™ํ™”๋ฅผ ํ•ด์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•œ๋‹ค๋ฉด ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ ๊ณ„์ •์ด ์•„๋‹Œ ๋ด‡ ๊ณ„์ •์— ์„ค์ •ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ถ€๊ณ„์ •์—์„œ ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฒ ์ง€๋งŒ ์ฃผ ๊ณ„์ •์—์„œ ์ด ์˜ต์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ž์œ ์ž…๋‹ˆ๋‹ค.

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

์œ ํšจํ•˜์ง€ ์•Š์€ ์นœ๊ตฌ ์ดˆ๋Œ€๋Š” 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.

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


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 ํŠธ๋ ˆ์ด๋”ฉ ์นด๋“œ. ๋ฐฐ์ง€ ์ œ์ž‘์— ์‚ฌ์šฉ. ์€๋ฐ• ์•„๋‹˜

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

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, 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) ์นด๋“œ ํŒ๋งค๋ถˆ๊ฐ€์ธ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„
15 ์žฅํ„ฐํ™” ๋‚ด๋ฆผ์ฐจ์ˆœ(MarketableDescending) ์นด๋“œ ํŒ๋งค๊ฐ€๋Šฅ์ธ ๊ฒŒ์ž„๋ถ€ํ„ฐ ๋จผ์ € ๋†์‚ฌ ์‹œ๋„

์ด ์†์„ฑ๊ฐ’์€ ๋ฐฐ์—ด์ด๋ฏ€๋กœ ๊ณ ์ •๋œ ์ˆœ์„œ๋ฅผ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์นด๋“œ ํŒ๋งค๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ๋จผ์ €, ๋ฐฐ์ง€ ๋ ˆ๋ฒจ์ด ๋†’์€ ๊ฒŒ์ž„์„ ๊ทธ ๋‹ค์Œ์—, ๋งˆ์ง€๋ง‰์œผ๋กœ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๊ณ  15, 11, ๊ทธ๋ฆฌ๊ณ  7 ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. As you can guess, the order actually matters, as reverse one (7, 11 and 15) achieves something entirely different (sorts games alphabetically first, and due to game names being unique, the other two are effectively useless). ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ํ•œ ๊ฐ€์ง€ ์ˆœ์„œ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์›ํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋” ๊นŠ์ด์žˆ๊ฒŒ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์„ค๋ช…์— ์žˆ๋Š” "์‹œ๋„"๋ผ๋Š” ๋‹จ์–ด์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ ASF์˜ ์ˆœ์„œ๋Š” ์„ ํƒํ•œ **์นด๋“œ ๋†์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**์— ์‹ฌํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ์ •๋ ฌ๋ฐฉ์‹์€ ๋™์ผํ•œ ์„ฑ๋Šฅ์ธก๋ฉด์„ ๊ณ ๋ คํ•œ ๊ฒฝ์šฐ์—๋งŒ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. For example, in Simple algorithm, selected FarmingOrders should be entirely respected in current farming session (as every game has the same performance value), while in Complex algorithm actual order is affected by hours first, and then sorted according to chosen FarmingOrders. This will lead to different results, as games with existing playtime will have a priority over others, so effectively ASF will prefer games that already passed required HoursUntilCardDrops firstly, and only then sorting those games further by your chosen FarmingOrders. Likewise, once ASF runs out of already-bumped games, it'll sort remaining queue by hours first (as that will decrease time required for bumping any of remaining titles to HoursUntilCardDrops). Therefore, this config property is only a suggestion that ASF will try to respect, as long as it doesn't affect performance negatively (in this case, ASF will always prefer farming performance over FarmingOrders).

There is also farming priority queue that is accessible through fq commands. If it's used, actual farming order is sorted firstly by performance, then by farming queue, and finally by your FarmingOrders.


FarmPriorityQueueOnly

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. This property defines if ASF should consider for automatic farming only apps that you added yourself to priority farming queue available with fq commands. When this option is enabled, ASF will skip all appIDs that are missing on the list, effectively allowing you to cherry-pick games for automatic ASF farming. Keep in mind that if you didn't add any games to the queue then ASF will act as if there is nothing to farm on your account. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹์ง€ ๋ถˆํ™•์‹คํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ false๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


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๋ฅผ ํ”Œ๋ ˆ์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๋ฝํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ๊ฐ’์— ๊ทธ๋งŒํผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


HoursUntilCardDrops

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


LootableTypes

ImmutableHashSet<byte> ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ 1, 3, 5 Steam ์•„์ดํ…œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. This property defines ASF behaviour when looting - both manual, using a command, as well as automatic one, through one or more configuration properties. 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

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

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).


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 Special startup video for Steam deck

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

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

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


OnlineFlags

ushort flags type with default value of 0. This property works as supplement to OnlineStatus and specifies additional online presence features announced to Steam network. Requires OnlineStatus other than Offline, and is defined as below:

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) No special online presence flags, default
256 ClientTypeWeb Client is using web interface
512 ClientTypeMobile Client is using mobile app
1024 ClientTypeTenfoot Client is using big picture
2048 ClientTypeVR Client is using VR headset

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

The underlying EPersonaStateFlag type that this property is based on includes more available flags, however, to the best of our knowledge they have absolutely no effect as of today, therefore they were cut for visibility.

์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ 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๋Š” ์ด ๊ฒฝ์šฐ ์–ด๋–ค ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด๋ฒคํŠธํŠธ๋กœ๋„ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€์™€ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ๋‹น์‹ ์ด ๋Œ์•„์˜ค๋ฉด ์ฝ์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

It's important to note that ASF running on Offline mode will not be able to receive commands in usual Steam chat way, as the chat, as well as entire community presence is in fact, entirely offline. A solution to this issue is using Invisible mode instead which works in a similar way (not exposing status), but keeps the ability to receive and respond to messages (so also a potential to dismiss notifications and unread messages as stated above). Invisible mode makes the most sense on alt accounts that you don't want to expose (status-wise), but still be able to send commands to.

However, there is one catch with Invisible mode - it doesn't go well with primary accounts. This is because any Steam session that is currently online exposes the status, even if ASF itself does not. This is caused by the current limitation/bug of the Steam network that isn't possible to be fixed on ASF side, so if you want to use Invisible mode you will also need to ensure that all other sessions to the same account use Invisible mode as well. This will be the case on alt accounts where ASF is hopefully the only active session, but on primary accounts you'll almost always prefer to show as Online to your friends, hiding only ASF activity, and in this case Invisible mode will be entirely useless for you (we recommend to use Offline mode instead). Hopefully this limitation/bug will be eventually solved in the future by Valve, but I wouldn't expect that to happen anytime soon...

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


PasswordFormat

byte type with default value of 0 (PlainText). This property defines the format of SteamPassword property, and currently supports values specified in the security section. You should follow the instructions specified there, as you'll need to ensure that SteamPassword property indeed includes password in matching PasswordFormat. ์ฆ‰, PasswordFormat์„ ๋ณ€๊ฒฝํ•˜๋ฉด SteamPassword๋Š” ๊ทธ ํ›„์— ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ด๋ฏธ ๊ทธ ํ˜•์‹์œผ๋กœ ๋ฐ”๋€Œ์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


Paused

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


RedeemingPreferences

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

๊ฐ’ ์ด๋ฆ„ ์„ค๋ช…
0 ์—†์Œ(None) No special redeeming preferences, default
1 Forwarding Forward keys unavailable to redeem to other bots
2 Distributing Distribute all keys among itself and other bots
4 KeepMissingGames Keep keys for (potentially) missing games when forwarding, leaving them unused
8 AssumeWalletKeyOnBadActivationCode Assume that BadActivationCode keys are equal to CannotRedeemCodeFromClient, and therefore try to redeem them as wallet keys

์ด ์†์„ฑ๊ฐ’์€ flags ํ•ญ๋ชฉ์ด๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”Œ๋ž˜๊ทธ ๋งคํ•‘ ์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(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 type with default value of 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 flags 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. ์ด ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SendOnFarmingFinished

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. ASF๊ฐ€ ํ•ด๋‹น ๊ณ„์ •์˜ ๋†์‚ฌ๋ฅผ ๋๋‚ด๋ฉด ์ด ์‹œ์ ๊นŒ์ง€ ๋†์‚ฌ์ง€์€ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จ์‹œํ‚จ Steam ๊ฑฐ๋ž˜๋ฅผ ์ฃผ์ธ(Master) ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž๋™์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ง์ ‘ ๊ฑฐ๋ž˜ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 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. ์ด ์˜ต์…˜์ด ์ผœ์ ธ์žˆ๋‹ค๋ฉด ๋†์‚ฌ ํ›„ ๋ฃจํŒ…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜, ASF๋Š” ๊ฑฐ๋ž˜๋กœ ์ƒ๊ธฐ๋Š” ์ƒˆ๋กœ์šด ์•„์ดํ…œ์˜ ์•Œ๋ฆผ๋„ ๋ฃจํŒ…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์šฐ๋ฆฌ ๊ณ„์ •์— ๋ณด๋‚ธ ์•„์ดํ…œ์„ "์ „๋‹ฌ"ํ•˜๋Š”๋ฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ๋“ค์–ด๋„ ์ˆ˜๋™์œผ๋กœ ํ™•์ธํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด ํ•„์ˆ˜์‚ฌํ•ญ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ณดํ†ต ์ด ๊ธฐ๋Šฅ๊ณผ 2๋‹จ๊ณ„ ์ธ์ฆ ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ธ false๋กœ ๋‘์‹ญ์‹œ์˜ค.


SendTradePeriod

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

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


ShutdownOnFarmingFinished

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

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


SkipRefundableGames

bool ํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ false์ž…๋‹ˆ๋‹ค. This property defines if ASF is permitted to farm games that are still refundable. ํ™˜๋ถˆ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์€ Steam ํ™˜๋ถˆ ํŽ˜์ด์ง€์— ๊ฒŒ์‹œ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ Steam ์ƒ์ ์—์„œ ๊ตฌ๋งคํ•œ์ง€ 2์ฃผ ์ด๋‚ด์ด๊ณ  2์‹œ๊ฐ„์„ ๋„˜์ง€์•Š๊ฒŒ ํ”Œ๋ ˆ์ดํ•œ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. By default when this option is set to false, ASF ignores Steam refunds policy entirely and farms everything, as most people would expect. However, you can change this option to true if you want to ensure that ASF won't farm any of your refundable games too soon, allowing you to evaluate those games yourself and refund if needed without worrying about ASF affecting playtime negatively. Please note that if you enable this option then games you purchased from Steam Store won't be farmed by ASF for up to 14 days since redeem date, which will show as nothing to farm if your account doesn't own anything else. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹์ง€ ๋ถˆํ™•์‹คํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ false๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.


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) ๋ฐ ๊ทธ ์ดํ•˜๋กœ ์„ค์ •ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ช…์˜ ์ฃผ์ธ(Master) ์„ ์„ค์ •ํ•ด๋„ ASF๋Š” ๋ด‡์—๊ฒŒ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๋“ฑ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. loot ์š”์ฒญ์ด๋‚˜ SendOnFarmingFinished, SendTradePeriod ์†์„ฑ๊ฐ’์ฒ˜๋Ÿผ ๋‹จ์ผ ๋Œ€์ƒ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ํ–‰๋™์˜ ๊ฒฝ์šฐ ASF๋Š” Steam ID ์ˆซ์ž๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์‚ฌ์šฉ์ž๋ฅผ ๊ทธ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. 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 type with default value of 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 flags mapping if you'd like to learn more. ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ(None)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

For further explanation of ASF trading logic, and description of every available flag, please visit trading section.


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

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

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 Steam network. Currently you can choose one of below modes:

๊ฐ’ ์ด๋ฆ„
0 Default
1 BigPicture
2 Mobile

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


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

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

โ”œโ”€โ”€ config
โ”‚     โ”œโ”€โ”€ ASF.json
โ”‚     โ”œโ”€โ”€ ASF.db
โ”‚     โ”œโ”€โ”€ Bot1.json
โ”‚     โ”œโ”€โ”€ Bot1.db
โ”‚     โ”œโ”€โ”€ Bot1.bin
โ”‚     โ”œโ”€โ”€ Bot2.json
โ”‚     โ”œโ”€โ”€ Bot2.db
โ”‚     โ”œโ”€โ”€ Bot2.bin
โ”‚     โ””โ”€โ”€ ...
โ”œโ”€โ”€ ArchiSteamFarm.dll
โ”œโ”€โ”€ log.txt
โ””โ”€โ”€ ...

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

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

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

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

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

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

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

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

๋ด‡์ด๋ฆ„.bin์€ Steam ์„ผํŠธ๋ฆฌ ํ•ด์‹œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŠน๋ณ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์„ผํŠธ๋ฆฌ ํ•ด์‹œ๋Š” Steam์˜ ssfnํŒŒ์ผ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ SteamGuard ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

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

๋ด‡์ด๋ฆ„.maFile์€ ASF 2๋‹จ๊ณ„ ์ธ์ฆ ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ํ•„์ˆ˜์‚ฌํ•ญ๋„ ์•„๋‹ˆ๊ณ  ์ƒ์„ฑ๋˜์ง€๋„ ์•ˆ์ง€๋งŒ ๋ด‡์ด๋ฆ„์ด 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> - ์ฃผ์–ด์ง„ 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> - keyType์— ํŠน์ •๋œ ์œ ์ผํ•œ ํ‚ค์™€ 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 - ํ”Œ๋ž˜๊ทธ๋Š” ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์†์„ฑ๊ฐ’์„ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์ตœ์ข…๊ฐ’์œผ๋กœ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋™์‹œ์— ํ—ˆ์šฉ๋œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€๋Šฅํ•œ ์–ด๋Š ์กฐํ•ฉ์ด๋ผ๋„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข…๊ฐ’์€ ๋ชจ๋“  ํ™œ์„ฑํ™”๋œ ์˜ต์…˜ ๊ฐ’์˜ ํ•ฉ๊ณ„๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

B + C์˜ ๊ฐ’์€ 6์ด ๋˜๊ณ , A + C๋Š” 5, C ๋Š” 4๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ํ™œ์„ฑํ™”๋œ ๊ฐ’์˜ ๊ฐ€๋Šฅํ•œ ์–ด๋Š ์กฐํ•ฉ์ด๋ผ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „๋ถ€๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด None + A + B + C๋ฅผ ํ•ด์„œ 7์˜ ๊ฐ’์„ ์–ป์Šต๋‹ˆ๋‹ค. 0๊ฐ’์„ ๊ฐ–๋Š” ํ”Œ๋ž˜๊ทธ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์—์„œ ํ™œ์„ฑํ™”๋˜๋ฏ€๋กœ, None ์ฒ˜๋Ÿผ ํŠน๋ณ„ํžˆ ์–ด๋–ค๊ฒƒ๋„ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋Š” ํ”Œ๋ž˜๊ทธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ค์‹œํ”ผ, ์œ„์˜ ์˜ˆ์ œ์—์„œ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ๋Š” 3๊ฐœ์˜ ํ”Œ๋ž˜๊ทธ A, B, C๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ์ด 8๊ฐœ์ž…๋‹ˆ๋‹ค.

  • None -> 0
  • A -> 1
  • B -> 2
  • A + B -> 3
  • C -> 4
  • A + C -> 5
  • B + C -> 6
  • A + B + C -> 7

Example: "SteamProtocols": 7


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

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 V2.1.6.2 ์ด์ƒ ๋ฒ„์ „๋ถ€ํ„ฐ ์‹คํ–‰์ค‘๊ฐ„์˜ ํ™˜๊ฒฝ์„ค์ • ์ˆ˜์ •์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ASF๋Š” ์ž๋™์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰๋™์„ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ