Skip to content

Configuration zh HK

ArchiBot edited this page Dec 20, 2024 · 83 revisions

้…็ฝฎ

ๆญค้ ้ขๅฐˆ้–€็”จๆ–ผ ASF ้…็ฝฎใ€‚ ๆไพ›้—œๆ–ผ config ็›ฎ้Œ„็š„ๅฎŒๆ•ดๆ–‡ไปถ๏ผŒๅ…่จฑๆ‚จไพ็…งๆ‚จ็š„้œ€ๆฑ‚่ชฟๆ•ด ASFใ€‚


ไป‹็ดน

ASF้…็ฝฎๅˆ†็‚บๅ…ฉๅ€‹ไธป่ฆ้ƒจๅˆ†โ”€โ”€ๅ…จๅŸŸ๏ผˆๆต็จ‹๏ผ‰้…็ฝฎๅ’Œๆฏๅ€‹ๆฉŸๆขฐไบบ็š„้…็ฝฎใ€‚ ๆฏๅ€‹ๆฉŸๆขฐไบบ้ƒฝๆœ‰่‡ชๅทฑ็š„ๆฉŸๆขฐไบบ่จญๅฎšๆช”๏ผŒๅ็‚บ BotName.json๏ผˆๅ…ถไธญ BotName ๆ˜ฏๆฉŸๆขฐไบบ็š„ๅ็จฑ๏ผ‰๏ผŒ่€Œๅ…จๅŸŸ ASF๏ผˆ้€ฒ็จ‹๏ผ‰้…็ฝฎๆ˜ฏไธ€ๅ€‹ๅ็‚บ ASF.json ็š„ๆช”ใ€‚

ๆฏๅ€‹ๆฉŸๆขฐไบบ้ƒฝๆ˜ฏไธ€ๅ€‹ๅœจ ASF ้€ฒ็จ‹ไธญ้‹่กŒ็š„็จ็ซ‹็š„ Steam ๅธณๆˆถใ€‚ ็‚บไบ†่ƒฝๅค ๆญฃๅธธๅทฅไฝœ๏ผŒASF ้œ€่ฆๅฎš็พฉ่‡ณๅฐ‘ไธ€ๅ€‹ๆฉŸๆขฐไบบๅฏฆไพ‹ใ€‚ ๆฉŸๆขฐไบบๅฏฆไพ‹ๆฒ’ๆœ‰้Ž็จ‹ๅผทๅˆถ้™ๅˆถ๏ผŒๅ› ๆญคๆ‚จๅฏไปฅๆ นๆ“š้œ€่ฆไฝฟ็”จไปปๆ„ๆ•ธ้‡็š„ๆฉŸๆขฐไบบ(Steamๅธณๆˆถ)ใ€‚

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.


็ถฒ้ ่จญๅฎšๆช”็”ข็”Ÿๅ™จ

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๏ผŒๅฎƒ็”š่‡ณๅฏไปฅโ€‹**้›ข็ทš**โ€‹ๅทฅไฝœใ€‚

็ถฒ้ ่จญๅฎšๆช”็”ข็”Ÿๅ™จๅทฒ็ถ“ๅœจ Chrome ๅ’Œ Firefox ไธŠ็ถ“้Ž้ฉ—่ญ‰ๅฏไปฅๆญฃๅธธ้‹่กŒ๏ผŒไฝ†ๅฎƒไนŸๆ‡‰่ฉฒๅฏไปฅๅœจๆ‰€ๆœ‰ๆต่กŒ็š„ๆ”ฏๆด JavaScript ็š„็€่ฆฝๅ™จไธญๆญฃๅธธๅทฅไฝœใ€‚

ๅฎƒ็š„็”จๆณ•้žๅธธ็ฐกๅ–ฎโ”€โ”€ๅˆ‡ๆ›ๅˆฐๆญฃ็ขบ็š„ๆจ™็ฐฝไพ†้ธๆ“‡่ฆ็”Ÿๆˆ ASF ่จญๅฎšๆช”้‚„ๆ˜ฏ Bot๏ผˆๆฉŸๆขฐไบบ๏ผ‰่จญๅฎšๆช”๏ผŒ็ขบไฟๆ‰€้ธ่จญๅฎšๆช”็š„็‰ˆๆœฌ่ˆ‡ๆ‚จ็š„ 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, 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,
    "DefaultBot": null,
    "FarmingDelay": 15,
    "FilterBadBots": true,
    "GiftsLimiterDelay": 1,
    "Headless": false,
    "IdleFarmingPeriod": 8,
    "InventoryLimiterDelay": 4,
    "IPC": true,
    "IPCPassword": null,
    "IPCPasswordFormat": 0,
    "LicenseID": null,
    "LoginLimiterDelay": 10,
    "MaxFarmingTime": 10,
    "MaxTradeHoldDuration": 15,
    "MinFarmingDelayAfterBlock": 60,
    "OptimizationMode": 0,
    "PluginsUpdateList": [],
    "PluginsUpdateMode": 0,
    "ShutdownIfPossible": false,
    "SteamMessagePrefix": "/me ",
    "SteamOwnerID": 0,
    "SteamProtocols": 7,
    "UpdateChannel": 1,
    "UpdatePeriod": 24,
    "WebLimiterDelay": 300,
    "WebProxy": null,
    "WebProxyPassword": null,
    "WebProxyUsername": null
}

ไปฅไธ‹ๆ˜ฏๅฐๆ‰€ๆœ‰้ธ้ …็š„่งฃ้‡‹๏ผš

AutoRestart

้ ่จญๅ€ผ็‚บ true ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆ˜ฏๅฆๅ…่จฑ ASF ๅœจ้œ€่ฆๆ™‚่‡ช่กŒ้‡ๅ•Ÿใ€‚ ๆœ‰ไธ€ไบ›ไบ‹ไปถ้œ€่ฆ ASF ่‡ช่กŒ้‡ๅ•Ÿ๏ผŒไพ‹ๅฆ‚ ASF ๆ›ดๆ–ฐ๏ผˆ้€š้Ž UpdatePeriod ๆˆ– update ๅ‘ฝไปคๅฎŒๆˆ๏ผ‰๏ผŒไปฅๅŠ ASF.json ้…็ฝฎ็š„็ทจ่ผฏใ€restart ๅ‘ฝไปค็ญ‰ใ€‚ ้€šๅธธๆƒ…ๆณไธ‹๏ผŒ้‡ๅ•ŸๅŒ…ๆ‹ฌๅ…ฉๅ€‹้ƒจๅˆ†โ”€โ”€ๅ‰ตๅปบๆ–ฐๆต็จ‹ๅ’ŒๅฎŒๆˆ็•ถๅ‰ๆต็จ‹ใ€‚ ไฝ†ๆ˜ฏ๏ผŒๅคงๅคšๆ•ธไฝฟ็”จ่€…ๆ‡‰่ฉฒๅฏไปฅไฝฟ็”จๅฎƒไธฆไฟ็•™ๅฑฌๆ€ง้ ่จญๅ€ผ็‚บ trueโ”€โ”€ๅฆ‚ๆžœๆ‚จๆญฃๅœจ้€š้Ž่‡ชๅทฑ็š„่…ณๆœฌ้‹่กŒ ASF๏ผŒๆˆ–่€…ไฝฟ็”จ dotnet ้‹่กŒ ASF๏ผŒๅ‰‡ๅฏ่ƒฝๅธŒๆœ›ๅฎŒๅ…จๆŽงๅˆถ้€ฒ็จ‹็š„ๅ•Ÿๅ‹•๏ผŒไธฆ้ฟๅ…ไปฅไธ‹ๆƒ…ๆณ๏ผšไฝฟๆ–ฐ็š„๏ผˆ้‡ๅ•Ÿ๏ผ‰ASF้€ฒ็จ‹ๅœจๅพŒๅฐ้œ้ป˜้‹่กŒ๏ผŒ่€Œไธๆ˜ฏๅœจ่…ณๆœฌ็š„ๅ‰ๆ™ฏไธญ้‹่กŒ๏ผŒ้€™ไบ›้€ฒ็จ‹่ˆ‡่ˆŠ็š„ASF้€ฒ็จ‹ไธ€่ตท้€€ๅ‡บใ€‚ ่€ƒๆ…ฎๅˆฐๆ–ฐ็š„ๆต็จ‹ๅฐ‡ไธๅ†ๆ˜ฏๆ‚จๅŽŸๆœ‰ๆต็จ‹็š„็›ดๆŽฅๅˆ†ๆ”ฏ๏ผŒ้€™ไธ€้ปžๅฐคๅ…ถ้‡่ฆ๏ผŒ้€™ๅฐ‡ไฝฟๆ‚จ็„กๆณ•ไฝฟ็”จๆจ™ๆบ–็š„ไธปๆŽงๅฐ่ผธๅ…ฅใ€‚

ๅœจๆญคๅฑฌๆ€งๅƒ…็‚บๆ‚จๆœๅ‹™็š„ๆƒ…ๆณไธ‹๏ผŒๆ‚จๅฏไปฅๅฐ‡ๅ…ถ่จญ็ฝฎ็‚บ falseใ€‚ ไฝ†ๆ˜ฏ๏ผŒ่ซ‹่จ˜ไฝ๏ผŒๅœจ้€™็จฎๆƒ…ๆณไธ‹ ๆ‚จ ่ฒ ่ฒฌ้‡ๅ•Ÿ้€ฒ็จ‹ใ€‚ ้€™ๅœจๆŸ็จฎ็จ‹ๅบฆไธŠๅพˆ้‡่ฆ๏ผŒๅ› ็‚บASFๅฐ‡ๅƒ…้€€ๅ‡บ๏ผŒ่€Œ้ž็”Ÿๆˆๆ–ฐ็š„้€ฒ็จ‹๏ผˆไพ‹ๅฆ‚ๆ›ดๆ–ฐๅพŒ๏ผ‰๏ผŒๅ› ๆญค๏ผŒๅฆ‚ๆžœๆ‚จๆฒ’ๆœ‰ๆทปๅŠ ้‚่ผฏ๏ผŒๅฎƒๅฐ‡ๅœๆญขๅทฅไฝœ๏ผŒ็›ดๅˆฐๆ‚จๅ†ๆฌกๅ•Ÿๅ‹•ๅฎƒใ€‚ ASF็ธฝๆ˜ฏไฝฟ็”จๆŒ‡็คบๆˆๅŠŸ๏ผˆ้›ถ๏ผ‰ๆˆ–้žๆˆๅŠŸ๏ผˆ้ž้›ถ๏ผ‰็š„้Œฏ่ชคไปฃ็ขผ้€€ๅ‡บ๏ผŒ้€™ๆจฃๆ‚จๅฐฑๅฏไปฅๅœจ่…ณๆœฌไธญๆทปๅŠ ๅˆ้ฉ็š„้‚่ผฏ๏ผŒๅพž่€Œ้ฟๅ…ๅœจๅ‡บ็พๆ•…้šœๆ™‚่‡ชๅ‹•้‡ๅ•Ÿ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็™ผไฝˆๆ™‚ๆœช็Ÿฅ็š„ๆ–ฐappIDs่จญ็ฝฎ็‚บ้ป‘ๅๅ–ฎ๏ผŒไธไบˆๆŽ›ๅกใ€‚ 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ๅต่ฝๅ‘ฝไปคใ€‚ ๅฏไปฅๅฐ‡ๆญคๅ€ผ่จญ็ฝฎ็‚บ null ๆˆ–็ฉบ๏ผŒไปฅ่ฎ“ ASF ไธไฝฟ็”จๅ‘ฝไปค้ฆ–็ขผ๏ผŒๅœจ้€™็จฎๆƒ…ๆณไธ‹๏ผŒๆ‚จๅฏไปฅไฝฟ็”จๅ…ถๆ™ฎ้€š่ญ˜ๅˆฅ็ขผ่ผธๅ…ฅๅ‘ฝไปคใ€‚ ไฝ†ๆ˜ฏ๏ผŒ้€™ๆจฃๅšๅฏ่ƒฝๆœƒ้™ไฝŽASF็š„ๆ€ง่ƒฝ๏ผŒๅ› ็‚บASF ็ถ“้Žๅ„ชๅŒ–๏ผŒๅฆ‚ๆžœไธๅพž CommandPrefix ้–‹ๅง‹๏ผŒๅฐฑไธๆœƒ้€ฒไธ€ๆญฅๅˆ†ๆžๆถˆๆฏโ”€โ”€ๅฆ‚ๆžœๆ‚จๆœ‰ๆ„ๆฑบๅฎšไธไฝฟ็”จๅฎƒ๏ผŒASFๅฐ‡่ขซ่ฟซ่ฎ€ๅ–ๆ‰€ๆœ‰ๆถˆๆฏไธฆๅฐๅ…ถๅšๅ‡บๅ›žๆ‡‰๏ผŒๅณไฝฟๅฎƒๅ€‘ไธๆ˜ฏASF ๅ‘ฝไปคใ€‚ ๅ› ๆญค๏ผŒๅฆ‚ๆžœๆ‚จไธๆƒณไฝฟ็”จ้ ่จญๅ€ผ ! ๏ผŒๅปบ่ญฐๆ‚จ็นผ็บŒไฝฟ็”จๆŸไบ› CommandPrefix๏ผŒๅฆ‚ /ใ€‚ ็‚บไบ†ไฟๆŒไธ€่‡ด๏ผŒ CommandPrefix ๆœƒๅฝฑ้Ÿฟๆ•ดๅ€‹ ASF ้€ฒ็จ‹ใ€‚ ้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


ConfirmationsLimiterDelay

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ10็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ ASFๅฐ‡็ขบไฟๅ…ฉๆฌก2FA็ขบ่ช่ซ‹ๆฑ‚ไน‹้–“่‡ณๅฐ‘ๆœ‰ConfirmationsLimiterDelay็ง’็š„ๆ™‚ๅปถ๏ผŒไปฅๅ…่งธ็™ผ้€Ÿ็Ž‡้™ๅˆถโ”€โ”€้€™ๅฐ‡็”จๆ–ผ**ASF 2FAๅŸท่กŒ2faokๅ‘ฝไปคๆˆ–ๅ…ถไป–ไบคๆ˜“็›ธ้—œๆ“ไฝœใ€‚ ้ ่จญๅ€ผๅŸบๆ–ผๆˆ‘ๅ€‘็š„ๆธฌ่ฉฆ่จญๅฎš, ๅฆ‚ๆžœๆ‚จไธๆƒณ้‡ๅˆฐๅ•้กŒ, ๅ‰‡ไธๆ‡‰้™ไฝŽ้ ่จญๅ€ผใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ**็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


ConnectionTimeout

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ90 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉ ASFๅŸท่กŒ็š„ๅ„็จฎ็ถฒ่ทฏๆ“ไฝœ็š„่ถ…ๆ™‚ (ไปฅ็ง’็‚บๅ–ฎไฝ)ใ€‚ ็ฐก่€Œ่จ€ไน‹, ConnectionTimeout ๅฎš็พฉไบ† HTTP ๅ’Œ IPC ่ซ‹ๆฑ‚็š„่ถ…ๆ™‚(็ง’ๆ•ธ๏ผ‰, ConnectionTimeout ๅฎš็พฉไบ†ๅคฑๆ•—ๆดปๅ‹•่จŠ่™Ÿ็š„ๆœ€ๅคงๆ•ธ้‡, ่€Œ ConnectionTimeout/30 ๅฎš็พฉไบ†ๆˆ‘ๅ€‘ๅ…่จฑๅˆๅง‹ Steam ็ถฒ่ทฏ้€ฃๆŽฅ่ซ‹ๆฑ‚็š„ๅˆ†้˜ๆ•ธใ€‚ 90 ็š„้ ่จญๅ€ผๅฐๅคงๅคšๆ•ธไบบไพ†่ชชๆ‡‰่ฉฒๆ˜ฏๅˆ้ฉ็š„๏ผŒไฝ†ๆ˜ฏ๏ผŒๅฆ‚ๆžœๆ‚จ็š„็ถฒ่ทฏ้€ฃๆŽฅๆˆ–PC้€Ÿๅบฆ็›ธ็•ถๆ…ข๏ผŒๆ‚จๅฏ่ƒฝๅธŒๆœ›็จๅพฎๅขžๅคงๆญคๅ€ผ๏ผˆๅฆ‚ 120๏ผ‰ใ€‚ ่ซ‹่จ˜ไฝ, ๅณไฝฟๆ˜ฏๆ›ดๅคง็š„ๅ€ผไบฆ็„กๆณ•็ฅžๅฅ‡ๅœฐไฟฎๅพฉ็ทฉๆ…ข็”š่‡ณ็„กๆณ•่จชๅ•็š„ Steam ไผบๆœๅ™จ, ๅ› ๆญคๆˆ‘ๅ€‘ไธๆ‡‰่ฉฒ็„ก้™็ญ‰ๅพ…ไธๆœƒ็™ผ็”Ÿ็š„ไบ‹ๆƒ…, ๅช้œ€็จๅพŒๅ†่ฉฆใ€‚ ๅฆ‚ๆžœๅฐ‡ๆญคๅ€ผ่จญ็ฝฎๅพ—้Ž้ซ˜, ๅฐ‡ๅฐŽ่‡ดๆ•็ฒ็ถฒ่ทฏๅ•้กŒ็š„้Žๅบฆๅปถ้ฒ, ไธฆ้™ไฝŽๆ•ด้ซ”ๆ€ง่ƒฝใ€‚ ๅฐ‡ๆญคๅ€ผ่จญ็ฝฎๅพ—้ŽไฝŽไนŸๆœƒ้™ไฝŽๆ•ด้ซ”็ฉฉๅฎšๆ€งๅ’Œๆ€ง่ƒฝ, ๅ› ็‚บASFๅฐ‡ไธญๆญขไปๅœจๅˆ†ๆž็š„ๆœ‰ๆ•ˆ่ซ‹ๆฑ‚ใ€‚ ๅ› ๆญค๏ผŒๅฐ‡ๆญคๅ€ผ่จญ็ฝฎ็‚บไฝŽๆ–ผ้ ่จญๅ€ผ้€šๅธธๆฒ’ๆœ‰ๅ„ชๅ‹ข๏ผŒๅ› ็‚บ Steamไผบๆœๅ™จๅพ€ๅพ€ๆœ‰ๆ™‚ๆœƒ้žๅธธๆ…ข๏ผŒไธฆไธ”ๅฏ่ƒฝ้œ€่ฆๆ›ดๅคš็š„ๆ™‚้–“ไพ†ๅˆ†ๆžASF่ซ‹ๆฑ‚ใ€‚ ้ ่จญๅ€ผๆ˜ฏๅœจ็›ธไฟกๆˆ‘ๅ€‘็š„็ถฒ่ทฏ้€ฃๆŽฅๆ˜ฏ็ฉฉๅฎš็š„ๅ’Œๆ‡ท็–‘่’ธๆฑฝ็ถฒ่ทฏๅœจ็ตฆๅฎš็š„่ถ…ๆ™‚ไธ‹่™•็†ๆˆ‘ๅ€‘็š„่ซ‹ๆฑ‚ไน‹้–“็š„ๅนณ่กกใ€‚ ๅฆ‚ๆžœๆ‚จๆƒณๆ›ดๆ—ฉๅœฐ็™ผ็พๅ•้กŒไธฆไฝฟASF็š„้‡ๆ–ฐ้€ฃๆŽฅ/ๅ›žๆ‡‰้€Ÿๅบฆๆ›ดๅฟซ, ้ ่จญๅ€ผๆ‡‰่ฉฒ่จญ็‚บ (ๆˆ–็•ฅไฝŽๆ–ผ, ๅฆ‚ 60, ๅพž่€Œๆธ›ๅฐ‘ASF ็š„็ญ‰ๅพ…ๆ™‚้–“)ใ€‚ ๅฆ‚ๆžœๆ‚จๆณจๆ„ๅˆฐ ASF ้‡ๅˆฐไบ†็ถฒ็ตกๅ•้กŒ๏ผŒไพ‹ๅฆ‚ๅคฑๆ•—็š„่ซ‹ๆฑ‚ใ€ๅคฑๅŽปๅฟƒ่ทณๆˆ–่ˆ‡ Steam ็š„้€ฃๆŽฅไธญๆ–ท๏ผŒ้‚ฃ้บผๅฆ‚ๆžœๆ‚จ็ขบๅฎšๆญคๅ•้กŒๆ˜ฏ็”ฑๆ‚จ็š„็ถฒ็ตก๏ผŒ่€Œ้žSteamๆœฌ่บซ้€ ๆˆ๏ผŒๅ‰‡ๅขžๅŠ ๆญคๅ€ผๅฏ่ƒฝๆ˜ฏๆœ‰ๆ„็พฉ็š„๏ผŒๅ› ็‚บๅขžๅŠ ่ถ…ๆ™‚ไฝฟASF ๆ›ดโ€œๆœ‰่€ๅฟƒโ€๏ผŒ่€Œไธๆ˜ฏๆฑบๅฎš็ซ‹ๅณ้‡ๆ–ฐ้€ฃๆŽฅใ€‚

ไธ€ๅ€‹ๅฏ่ƒฝ้œ€่ฆๅขžๅŠ ๆญคๅฑฌๆ€ง็š„็คบไพ‹ๆƒ…ๆณๆ˜ฏ่ฎ“ASF่™•็†ไธ€ๅ€‹้žๅธธๅทจๅคง็š„ไบคๆ˜“ๆๆกˆ๏ผŒๅฏ่ƒฝ้œ€่ฆๅคงไบŽ2ๅˆ†้˜็š„ๆ™‚้–“ๆ‰่ƒฝ่ขซSteamๅฎŒๅ…จๆŽฅๅ—ไธฆ่™•็†ใ€‚ ้€š้ŽๅขžๅŠ ่ถ…ๆ™‚็š„้ ่จญๅ€ผ, ๅœจๆฑบๅฎšๆ”พๆฃ„ไบคๆ˜“ไน‹ๅ‰๏ผŒASF ๅฐ‡ๆ›ดๆœ‰่€ๅฟƒ, ็ญ‰ๅพ…ๆ›ด้•ท็š„ๆ™‚้–“ใ€‚

ๅฆไธ€็จฎๆƒ…ๆณๅฏ่ƒฝๆ˜ฏ็”ฑๆ–ผๆฉŸๅ™จๆˆ–ไบ’่ฏ็ถฒ้€ฃๆŽฅ้žๅธธๆ…ข, ้œ€่ฆๆ›ดๅคš็š„ๆ™‚้–“ไพ†่™•็†ๆญฃๅœจๅ‚ณ่ผธ็š„่ณ‡ๆ–™ใ€‚ ้€™ๆ˜ฏ้žๅธธ็ฝ•่ฆ‹็š„ๆƒ…ๆณ, ๅ› ็‚บCPU\ ็ถฒ่ทฏ้ ปๅฏฌๅนพไนŽๅพžไพ†้ƒฝไธๆ˜ฏ็“ถ้ ธ, ไฝ†้€™ไป็„ถๆ˜ฏไธ€ๅ€‹ๅ€ผๅพ—ๆๅŠ็š„ๅฏ่ƒฝๆ€งใ€‚

็ฐก่€Œ่จ€ไน‹, ้ ่จญๅ€ผๅœจๅคงๅคšๆ•ธๆƒ…ๆณไธ‹ๆ‡‰่ฉฒๆ˜ฏๅˆ้ฉ็š„, ไฝ†่‹ฅ้œ€่ฆ๏ผŒๆ‚จๅฏ่ƒฝ่ฆๅขžๅŠ ้ ่จญๅ€ผใ€‚ ไธ้Ž๏ผŒ้ ้ ้ซ˜ๆ–ผ้ ่จญๅ€ผไนŸๆฒ’ๆœ‰ๅคšๅคงๆ„็พฉ๏ผŒๅ› ็‚บๆ›ดๅคง็š„่ถ…ๆ™‚ไบฆ็„กไฟฎๅพฉ็„กๆณ•่จชๅ•็š„Steam ไผบๆœๅ™จ็š„้ญ”ๆณ•ใ€‚ ้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


CurrentCulture

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ้ ่จญๆƒ…ๆณไธ‹๏ผŒASFๅฐ‡ๅ˜—่ฉฆไฝฟ็”จๆ‚จ็š„ๆ“ไฝœ็ณป็ตฑ่ชž่จ€๏ผŒไธฆไธ”ๆ›ด้ก˜ๆ„ไฝฟ็”จ่ฉฒ่ชž่จ€ไธญ็š„็ฟป่ญฏๅญ—ไธฒ๏ผˆๅฆ‚ๆžœๅฏ็”จ๏ผ‰ใ€‚ ้€™ๆ‡‰ๆ„Ÿ่ฌๆˆ‘ๅ€‘็š„็คพๅ€ๆˆๅ“ก๏ผŒไป–ๅ€‘่‡ดๅŠ›ๆ–ผๆŽจๅ‹•ASFๅœจๅ„็จฎไธปๆต่ชž่จ€ไธญ็š„**ๆœฌๅœŸๅŒ–**้€ฒ็จ‹ใ€‚ ๅฆ‚ๆžœ็”ฑๆ–ผๆŸ็จฎๅŽŸๅ› ๆ‚จไธๆƒณไฝฟ็”จๆœฌๆฉŸ่ชž่จ€๏ผŒๅ‰‡ๅฏไปฅไฝฟ็”จๆญค้…็ฝฎๅฑฌๆ€ง้ธๆ“‡่ฆไฝฟ็”จ็š„ไปปไฝ•ๆœ‰ๆ•ˆ่ชž่จ€ใ€‚ ๆœ‰้—œๆ‰€ๆœ‰ๅฏ็”จ่ชž็ณป็š„ๆธ…ๅ–ฎ๏ผŒ่ซ‹่จชๅ• **MSDN**ไธฆๆŸฅๆ‰พ่ชž่จ€ๆจ™็ฑคใ€‚ It's nice to note that ASF accepts both specific cultures, such as "en-GB", but also neutral ones, such as "en". ๆŒ‡ๅฎš็•ถๅ‰่ชž็ณป้‚„ๅฏ่ƒฝๆœƒๅฝฑ้Ÿฟๅ…ถไป–ไพ่ณดๆ–ผ่ชž็ณป็š„่กŒ็‚บ๏ผŒๅฆ‚่ฒจๅนฃ/ๆ—ฅๆœŸๆ ผๅผ็ญ‰ใ€‚ ่ซ‹ๆณจๆ„๏ผŒๅฆ‚ๆžœๆ‚จ้ธๆ“‡้žๆœฌๆฉŸ่ชž่จ€๏ผŒๅ‰‡ๅฏ่ƒฝ้œ€่ฆ้กๅค–็š„ๅญ—้ซ”/่ชž่จ€ๅŒ…ไพ†ๆญฃ็ขบ้กฏ็คบๆ‰€้ธ่ชž่จ€็š„ๅญ—ๅ…ƒใ€‚ ้€šๅธธ๏ผŒๅฆ‚ๆžœๆ‚จๆ›ดๅ–œๆญก่ฎ“ASFไฝฟ็”จ่‹ฑ่ชž่€Œไธๆ˜ฏๆ‚จ็š„ๆฏ่ชž๏ผŒๅ‰‡้œ€ไฝฟ็”จๆญค้…็ฝฎๅฑฌๆ€งใ€‚


Debug

้ ่จญๅ€ผ็‚บ false ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉ้€ฒ็จ‹ๆ˜ฏๅฆๆ‡‰ๅœจๅต้Œฏๆจกๅผไธ‹้‹่กŒใ€‚ ๅœจๅต้Œฏๆจกๅผไธ‹๏ผŒASFๆœƒๅœจ config ๆ—้‚Šๅ‰ตๅปบไธ€ๅ€‹็‰นๆฎŠ็š„ debug ็›ฎ้Œ„๏ผŒ็”จๆ–ผ่ทŸ่นคASFๅ’Œ Steam ไผบๆœๅ™จไน‹้–“็š„ๆ•ด้ซ”้€šไฟกใ€‚ ่ชฟ่ฉฆ่ณ‡่จŠๆœ‰ๅŠฉๆ–ผ็™ผ็พ่ˆ‡็ถฒ็ตกๅ’Œไธ€่ˆฌASFๅทฅไฝœๆต็›ธ้—œ็š„ๆฃ˜ๆ‰‹ๅ•้กŒใ€‚ ้™คๆญคไน‹ๅค–๏ผŒๆŸไบ›็จ‹ๅผๅธธๅผๅฐ‡ๆ›ดๅŠ ่ฉณ็ดฐ๏ผŒไพ‹ๅฆ‚ WebBrowser ๅฐ‡ๆœƒ่ชชๆ˜Ž่ซ‹ๆฑ‚ๅคฑๆ•—็š„็ขบๅˆ‡ๅŽŸๅ› โ”€โ”€้€™ไบ›ๆข็›ฎๅฐ‡่ขซๅฏซๅ…ฅๆญฃๅธธ็š„ASFๆ—ฅ่ชŒไธญใ€‚ ้™ค้ž้–‹็™ผไบบๅ“กๆๅ‡บ่ฆๆฑ‚๏ผŒๅฆๅ‰‡ๆ‚จไธๆ‡‰ๅœจๅต้Œฏๆจกๅผไธ‹้‹่กŒASFใ€‚ ๅœจๅต้Œฏๆจกๅผ ไธ‹้‹่กŒASFๆœƒ้™ไฝŽๆ€ง่ƒฝ๏ผŒไธๅˆฉๆ–ผ็ฉฉๅฎšๆ€ง๏ผŒไธฆไธ”ๆ˜ฏ ็”Ÿๆˆ้Žๅคš่จŠๆฏ๏ผŒๅ› ๆญคๅปบ่ญฐ ๅƒ…้œ€่ฆๆ™‚ไฝฟ็”จ๏ผŒไปฅ็”จๆ–ผ่ชฟ่ฉฆ็‰นๅฎšๅ•้กŒใ€้‡็พ้Œฏ่ชคๆˆ–็ฒๅ–ๆœ‰้—œๅคฑๆ•—่ซ‹ๆฑ‚็š„ๆ›ดๅคš่ณ‡่จŠ๏ผŒไฝ† ไธๆ‡‰ๅœจๆญฃๅธธๆƒ…ๆณไธ‹้‹่กŒๆญคๆจกๅผใ€‚ ๆ‚จๅฐ‡็œ‹ๅˆฐไธ€ๅ †ๆ–ฐ็š„้Œฏ่ชคใ€ๅ•้กŒๅ’Œ็•ฐๅธธโ”€โ”€ๅฆ‚ๆžœๆ‚จๆฑบๅฎš่‡ชๅทฑๅˆ†ๆžๆ‰€ๆœ‰้€™ไบ›ๅ…งๅฎน๏ผŒ่ซ‹็ขบไฟๆ‚จๅฐASFๅŠSteamๆœ‰ๅ……ๅˆ†็š„็žญ่งฃ๏ผŒๅ› ็‚บไธฆ้žๆ‰€ๆœ‰ๅ…งๅฎน้ƒฝ่ˆ‡ๅ•้กŒ็›ธ้—œใ€‚

่ญฆๅ‘Š๏ผš ๅ•Ÿ็”จๆญคๆจกๅผๅฐ‡่จ˜้Œ„ ๆฝœๅœจ็š„ๆ•ๆ„Ÿ่ณ‡่จŠ๏ผŒๅฆ‚็™ป้Œ„ๅๅ’Œ็”จๆ–ผ็™ป้Œ„ๅˆฐSteam็š„ๅฏ†็ขผ๏ผˆไปฅไฝœ็ถฒ็ตกๆ—ฅ่ชŒ่จ˜้Œ„๏ผ‰ใ€‚ ้€™ไบ›่ณ‡ๆ–™ๆ—ขๅฏซๅ…ฅ debug ็›ฎ้Œ„๏ผŒไนŸๅฏซๅ…ฅๆจ™ๆบ– log.txt (ๆญค่ณ‡่จŠๅฐ‡่ขซ่ฉณ็ดฐๅœฐ่จ˜้Œ„)ใ€‚ ๆ‚จไธๆ‡‰่ฉฒๅœจไปปไฝ•ๅ…ฌๅ…ฑไฝ็ฝฎ็™ผไฝˆ ASF็”Ÿๆˆ็š„่ชฟ่ฉฆๅ…งๅฎน๏ผŒASF ้–‹็™ผไบบๅ“กๅง‹็ต‚ๆ้†’ๆ‚จๆ‡‰ๅฐ‡ๅ…ถ็™ผ้€ๅˆฐไป–็š„้›ปๅญ้ƒตไปถๆˆ–ๅ…ถไป–ๅฎ‰ๅ…จไฝ็ฝฎใ€‚ ๆˆ‘ๅ€‘ไธๆœƒๅ„ฒๅญ˜ๆˆ–ๅˆฉ็”จ้€™ไบ›ๆ•ๆ„Ÿ่ณ‡่จŠ๏ผŒไป–ๅ€‘ๅชๆ˜ฏไฝœ็‚บๅฏ่ƒฝ็š„้Œฏ่ชคๅ› ็ด ่ขซ่จ˜้Œ„ๆ–ผ่ชฟ่ฉฆๅ…งๅฎนไธญใ€‚ ๆˆ‘ๅ€‘ๆ›ดๅธŒๆœ›ๆ‚จไธไปฅไปปไฝ•ๆ–นๅผๆ”น่ฎŠASFๆ—ฅ่ชŒ่จ˜้Œ„๏ผŒไฝ†ๅฆ‚ๆžœๆ‚จๆ“”ๅฟƒ๏ผŒๆ‚จๅฏไปฅ็ทจ่ผฏ้€™ไบ›ๆ•ๆ„Ÿ็š„็ดฐ็ฏ€ใ€‚

ๆ‚จๅฏไปฅ็”จ็‰นๆฎŠ็ฌฆ่™Ÿๆ›ฟๆ›ๆ•ๆ„Ÿ็š„็ดฐ็ฏ€๏ผŒไพ‹ๅฆ‚**ใ€‚ ไฝ ๆ‡‰่ฉฒ้ฟๅ…ๅฎŒๅ…จๅˆช้™คๆ•ๆ„Ÿ็š„ๆ•ธๆ“š๏ผŒๅ› ็‚บๅฎƒๅ€‘็š„ๅญ˜ๅœจๅฏ่ƒฝ่ˆ‡ๅ•้กŒ็›ธ้—œ๏ผŒๆ‡‰่ฉฒไบˆไปฅไฟ็•™ใ€‚


DefaultBot

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ In some scenarios ASF functions with a concept of a default bot responsible for handling something - for example IPC commands or interactive console when you don't specify target bot. This property allows you to choose default bot responsible for handling such scenarios, by putting its BotName here. If given bot doesn't exist, or you use a default value of null, ASF will pick first registered bot sorted alphabetically instead. Typically you want to make use of this config property if you want to omit [Bots] argument in IPC and interactive console commands, and always pick the same bot as the default one for such calls.


FarmingDelay

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ15 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ASFๆœƒๅœจๅทฅไฝœๆ™‚ๆฏFarmingDelayๅˆ†้˜ๆชขๆŸฅ็•ถๅ‰ๆŽ›ๅก็š„้Šๆˆฒๆ˜ฏๅฆๅทฒ็ถ“ๆŽ‰่ฝไบ†ๆ‰€ๆœ‰็š„ๅก็‰‡ใ€‚ ๅฐ‡ๆญคๅฑฌๆ€ง่จญ็ฝฎๅพ—้ŽไฝŽๅฏ่ƒฝๆœƒๅฐŽ่‡ด็™ผ้€้Žๅคš็š„Steam่ซ‹ๆฑ‚๏ผŒ่€Œ่จญ็ฝฎ้Ž้ซ˜ๅฏ่ƒฝๆœƒๅฐŽ่‡ดASFๅœจๆŽ›ๅกๅฎŒๆˆไน‹ๅพŒไป็„ถใ€Œๅทฅไฝœใ€้”farmingdelay ๅˆ†้˜ใ€‚ ้ ่จญๅ€ผๆ‡‰่ฉฒๆ˜ฏ้ฉๅˆๅคงๅคšๆ•ธ็”จๆˆถ็š„๏ผŒๅฆ‚ๆžœๆ‚จๆœ‰่จฑๅคšๆฉŸๆขฐไบบๅœจ้‹่กŒ๏ผŒๅ‰‡ๅฏไปฅ่€ƒๆ…ฎๅฐ‡ๅ…ถๅขžๅŠ ่‡ณ้กžไผผ 30 ๅˆ†้˜๏ผŒไปฅ้™ๅˆถ็™ผ้€Steam่ซ‹ๆฑ‚ใ€‚ ๅ€ผๅพ—ไธ€ๆ็š„ๆ˜ฏ๏ผŒASFไฝฟ็”จๅŸบๆ–ผไบ‹ไปถ็š„ๆฉŸๅˆถ๏ผŒๆœƒๅœจๆ”ถๅˆฐๆฏๅ€‹ๆŽ‰่ฝ็š„Steam็‰ฉๅ“ๆ™‚ๆชขๆŸฅ้Šๆˆฒๅพฝ็ซ ้ ้ข๏ผŒๆ‰€ไปฅ้€šๅธธๆˆ‘ๅ€‘็”š่‡ณไธ้œ€่ฆๆฏ้š”ไธ€ๅฎšๆ™‚้–“ๆชขๆŸฅ๏ผŒไฝ†็”ฑๆ–ผๆˆ‘ๅ€‘ไธ่ƒฝๅฎŒๅ…จไฟกไปปSteam็ถฒ็ตกโ”€โ”€ๆˆ‘ๅ€‘ไป็„ถ้œ€่ฆๆ‰‹ๅ‹•ๆชขๆŸฅ้Šๆˆฒๅพฝ็ซ ้ ้ข๏ผŒๅฆ‚ๆžœๆˆ‘ๅ€‘ๆœช่ƒฝๅœจFarmingDelay ๅˆ†้˜ๅ…งๆชขๆŸฅๅก็‰‡ๆŽ‰่ฝไบ‹ไปถ๏ผˆ่ฌไธ€Steam็ถฒ่ทฏๆฒ’ๆœ‰้€š็Ÿฅๆˆ‘ๅ€‘ๆœ‰้—œ็‰ฉๅ“ๆŽ‰่ฝๆˆ–้กžไผผ็š„่ณ‡่จŠ๏ผ‰ใ€‚ ๅ‡่จญSteam็ถฒ็ตกๅทฅไฝœๆญฃๅธธ๏ผŒ้™ไฝŽๆญคๅ€ผ ไธๆœƒไปฅไปปไฝ•ๆ–นๅผๆ้ซ˜ๆŽ›ๅกๆ•ˆ็Ž‡๏ผŒ่€Œ ๅชๆœƒ้กฏ่‘—ๅขžๅŠ ็ถฒ็ตก้–‹้Šทโ”€โ”€ๅปบ่ญฐไฟๆŒ15ๅˆ†้˜็š„้ ่จญๅ€ผ๏ผˆไธฆๅƒ…ๅœจ้œ€่ฆๆ™‚ๆ‰ๅขžๅŠ ๅฎƒ๏ผ‰ใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


FilterBadBots

้ ่จญๅ€ผ็‚บ true ็š„ bool ้กžๅž‹ใ€‚ 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

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ1 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ASFๅฐ‡็ขบไฟๆฏๅ…ฉๅ€‹้€ฃ็บŒ็š„ๅฐ้Šๆˆฒ/ๅบ่™Ÿ/่จฑๅฏ่ญ‰็š„่™•็†๏ผˆๅ…Œๆ›๏ผ‰่ซ‹ๆฑ‚ไน‹้–“่‡ณๅฐ‘้–“้š”GiftsLimiterDelay็ง’๏ผŒไปฅ้ฟๅ…่งธ็™ผ้€Ÿ็Ž‡้™ๅˆถใ€‚ In addition to that it'll also be used as global limiter for game list requests, such as the one issued by owns command. Unless you have a strong reason to edit this property, you should keep it at default.


Headless

้ ่จญๅ€ผ็‚บ false ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉ้€ฒ็จ‹ๆ˜ฏๅฆๆ‡‰ๅœจHeadlessๆจกๅผไธ‹้‹่กŒใ€‚ ๅœจ Headless ๆจกๅผไธ‹๏ผŒASF ๅ‡ๅฎšๅฎƒๅœจๆœๅ‹™ๅ™จๆˆ–ๅ…ถไป–้žไบคไบ’ๅผ็’ฐๅขƒไธญ้‹่กŒ๏ผŒๅ› ๆญคๅฎƒไธๆœƒๅ˜—่ฉฆ้€š้ŽๆŽงๅˆถๅฐ่ผธๅ…ฅ่ฎ€ๅ–ไปปไฝ•ไฟกๆฏใ€‚ ้€™ๅŒ…ๆ‹ฌ้œ€่ฆ็š„่ฉณ็ดฐไฟกๆฏ๏ผˆๅธณๆˆถๆ†‘ๆ“š๏ผŒๅฆ‚ 2FA ไปฃ็ขผ๏ผŒSteamGuard ไปฃ็ขผ๏ผŒๅฏ†็ขผๆˆ– ASF ้‹่กŒๆ‰€้œ€็š„ไปปไฝ•ๅ…ถไป–่ฎŠๆ•ธ๏ผ‰ไปฅๅŠๆ‰€ๆœ‰ๅ…ถไป–ๆŽงๅˆถๅฐ่ผธๅ…ฅ๏ผˆๅฆ‚ไบคไบ’ๅผๅ‘ฝไปคๆŽงๅˆถๅฐ๏ผ‰ใ€‚ ๆ›ๅฅ่ฉฑ่ชช๏ผŒHeadlessๆจกๅผ็ญ‰ๅŒๆ–ผๅฐ‡ ASF ๆŽงๅˆถๅฐ่จญ็ฝฎ็‚บๅ”ฏ่ฎ€ใ€‚ ๆญค่จญ็ฝฎไธป่ฆ็”จๆ–ผๅœจๅ…ถๆœๅ‹™ๅ™จไธŠ้‹่กŒ ASF ็š„็”จๆˆถ๏ผŒ็•ถ ASF ้œ€่ฆ่ˆ‡็”จๆˆถไบคไบ’๏ผŒไพ‹ๅฆ‚่ฉขๅ• 2FA ไปฃ็ขผๆ™‚๏ผŒASFๅฐ‡้€š้Žๅœๆญขๅธณๆˆถไปฅไธญๆญขๆ“ไฝœใ€‚ ้™ค้žๆ‚จๅœจไผบๆœๅ™จไธŠ้‹่กŒASF๏ผŒไธฆไธ”ๆ‚จไปฅๅ‰ๅทฒ็ขบ่ชASF่ƒฝๅค ๅœจnon-headlessๆจกๅผไธ‹้‹่กŒ๏ผŒๅฆๅ‰‡ๆ‡‰็ฆ็”จๆญคๅฑฌๆ€งใ€‚ Any user interaction will be denied when in headless mode, and your accounts will not run if they require any console input during starting. ้€™ๅฐไผบๆœๅ™จๅพˆๆœ‰็”จ๏ผŒๅ› ็‚บASFๅฏไปฅๅœจ่ฆๆฑ‚ๆไพ›ๆ†‘ๆ“šๆ™‚ไธญๆญข็™ป้Œ„ๅธณๆˆถ็š„ๅ˜—่ฉฆ๏ผŒ่€Œไธๆ˜ฏ๏ผˆ็„ก้™๏ผ‰ๅœฐ็ญ‰ๅพ…็”จๆˆถๆไพ›้€™ไบ›ๆ†‘ๆ“šใ€‚ Enabling this mode will also allow you to use input command which acts as a replacement for standard console input. ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎš่ฉฒๅฆ‚ไฝ•่จญ็ฝฎๆญคๅฑฌๆ€ง๏ผŒ่ซ‹ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผfalseใ€‚


IdleFarmingPeriod

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ8็š„byte flags้กžๅž‹ๅฑฌๆ€งใ€‚ ็•ถASFๆฒ’ๆœ‰ไปปไฝ•ๅฏๆŽ›ๅก็š„้Šๆˆฒๆ™‚๏ผŒๅฎƒๅฐ‡ๆฏIdleFarmingPeriodๅฐๆ™‚ๅฎšๆœŸๆชขๆŸฅๅธณๆˆถๅ…งๆ˜ฏๅฆๆœ‰ไธ€ไบ›ๆ–ฐ็š„้Šๆˆฒๅฏไพ›ๆŽ›ๅกใ€‚ ็•ถๆˆ‘ๅ€‘็ฒๅพ—ๆ–ฐ้Šๆˆฒๆ™‚๏ผŒไธฆไธ้œ€่ฆๆญคๅŠŸ่ƒฝ๏ผŒๅ› ็‚บASF่ถณๅค ๆ™บ่ƒฝ๏ผŒๅฏไปฅๅœจ้€™็จฎๆƒ…ๆณไธ‹่‡ชๅ‹•ๆชขๆŸฅๅพฝ็ซ ้ ใ€‚ IdleFarmingPeriodไธป่ฆ็”จๆ–ผๅธณๆˆถไธญๅทฒๆœ‰็š„้Šๆˆฒๆ–ฐๅขžๅก็‰‡็š„ๆƒ…ๆณใ€‚ ๅœจ้€™็จฎๆƒ…ๆณไธ‹ๆฒ’ๆœ‰ไบ‹ไปถ่ขซ่งธ็™ผ๏ผŒๅ› ๆญคASFๅฟ…้ ˆๅฎšๆœŸๆชขๆŸฅๅพฝ็ซ ้ ใ€‚ ๅฐ‡ๆญคๅ€ผ่จญ็ฝฎ็‚บ0ๅฏ็ฆ็”จๆญคๅŠŸ่ƒฝใ€‚ Also check: ShutdownOnFarmingFinished preference in FarmingPreferences.


InventoryLimiterDelay

byte type with default value of 4. ASF will ensure that there will be at least InventoryLimiterDelay seconds in between of two consecutive web inventory requests to avoid triggering rate-limit - those are being used for example during marking inventory notifications as read, might also be used by third-party plugins fetching inventory of other users. This property is not used for fetching our own inventory, as ASF is using much more efficient internal network call for that, so it'll not affect commands like loot or transfer in any way. Default value of 4 was set based on marking 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 mark 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 making any calls at all. ๅฆ‚ๆžœๆ‚จ้‹่กŒๅคง้‡็š„็š„ๆฉŸๆขฐไบบไธฆๆœ‰ๅคง้‡ๅบซๅญ˜่ซ‹ๆฑ‚๏ผŒๅ‰‡ๅฏ่ƒฝ้‚„้œ€่ฆๅขžๅŠ ๆญคๅ€ผ๏ผŒไธ้Žๅœจ้€™็จฎๆƒ…ๆณไธ‹๏ผŒๆ‚จๅฏ่ƒฝๆ›ดๆ‡‰่ฉฒๅ˜—่ฉฆ้™ๅˆถ้€™ไบ›่ซ‹ๆฑ‚็š„ๆ•ธ้‡ใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


IPC

้ ่จญๅ€ผ็‚บ true ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉไบ†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

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€ง็‚บ้€š้ŽIPCๅŸท่กŒ็š„ๆฏๅ€‹APIๅฎš็พฉๅผทๅˆถๆ€งๅฏ†็ขผ๏ผŒไฝœ็‚บ้กๅค–็š„ๅฎ‰ๅ…จๆŽชๆ–ฝใ€‚ ็•ถๆญคๅ€ผ้ž็ฉบๆ™‚๏ผŒๆ‰€ๆœ‰IPC่ซ‹ๆฑ‚้ƒฝ้œ€่ฆๅฐ‡้กๅค–็š„passwordๅฑฌๆ€ง่จญ็ฝฎ็‚บๆญค่™•ๆŒ‡ๅฎš็š„ๅฏ†็ขผใ€‚ ้ ่จญๅ€ผ็‚บnullๅฐ‡ไฝฟASF่ทณ้Žๅฏ†็ขผ้ฉ—่ญ‰่€ŒๆŽฅๅ—ๆ‰€ๆœ‰่ซ‹ๆฑ‚ใ€‚ ้™คๆญคไน‹ๅค–๏ผŒๅ•Ÿ็”จๆญค้ธ้ …้‚„ๅ•Ÿ็”จไบ†ๅ…ง็ฝฎ็š„IPCๅๆšดๅŠ›็ ด่งฃๆฉŸๅˆถ๏ผŒ่ฉฒๆฉŸๅˆถๅฐ‡ๅœจๅต่ฝๅˆฐๆŸIPAddressๅœจ็Ÿญๆ™‚้–“ๅ…ง็™ผ้€้Žๅคšๆœช็ถ“ๆŽˆๆฌŠ็š„่ซ‹ๆฑ‚ๅพŒ๏ผŒๆšซๆ™‚ๅฐ็ฆๅฎƒใ€‚ ้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


IPCPasswordFormat

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ้กžๅž‹ใ€‚ 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

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ10็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ ASF ๅฐ‡็ขบไฟๆฏๅ…ฉๆฌก้€ฃๆŽฅ่ซ‹ๆฑ‚ไน‹้–“่‡ณๅฐ‘้–“้š”LoginLimiterDelay็ง’ไปฅ้ฟๅ…่งธ็™ผ้€Ÿ็Ž‡้™ๅˆถใ€‚ ้ ่จญๅ€ผ 10 ๆ˜ฏๅŸบๆ–ผ้€ฃๆŽฅ100ๅคšๅ€‹ๆฉŸๆขฐไบบๅฏฆไพ‹็š„ๆƒ…ๆณ่จญ็ฝฎ็š„๏ผŒๆ‡‰่ฉฒ้ฉ็”จๆ–ผๅคงๅคšๆ•ธ๏ผˆๅฆ‚ๆžœไธๆ˜ฏๅ…จ้ƒจ๏ผ‰็”จๆˆถใ€‚ ไฝ†ๆ˜ฏ๏ผŒๆ‚จๅฏ่ƒฝๅธŒๆœ›ๅขžๅŠ /ๆธ›ๅฐ‘ๅฎƒ๏ผŒๅฆ‚ๆžœๆ‚จ็š„ๆฉŸๆขฐไบบๆ•ธ้‡้žๅธธๅฐ‘๏ผŒๆ‚จๅฏ่ƒฝ็”š่‡ณๆƒณๅฐ‡ๅ…ถๆ›ดๆ”น็‚บ 0 0๏ผŒ้€™ๆจฃ ASF ๅฐ‡ๅฟฝ็•ฅๅปถ้ฒไธฆๆ›ดๅฟซๅœฐ้€ฃๆŽฅๅˆฐ Steamใ€‚ ไธ้Ž๏ผŒ่ซ‹ๆณจๆ„๏ผŒ่‹ฅๆ˜ฏๅœจๅคง้‡ๆฉŸๆขฐไบบๅŒๆ™‚ๅทฅไฝœๆ™‚๏ผŒๅฐ‡ๆญคๅ€ผ่จญ็ฝฎๅพ—ๅคชไฝŽๆœƒๅฐŽ่‡ดSteamๆšซๆ™‚ๅฐ็ฆๆ‚จ็š„ IP๏ผŒ้€™ๅฐ‡่งธ็™ผInvalidPassword/RateLimitExceeded ้Œฏ่ชค๏ผŒๅพนๅบ•้˜ปๆญขๆ‚จ็š„็™ป้Œ„โ”€โ”€ไธๅƒ…ๆ˜ฏ ASF๏ผŒ้‚„ๅŒ…ๆ‹ฌๆ‚จ็š„ Steam ๅฎขๆˆถ็ซฏใ€‚ ๅŒๆจฃ๏ผŒๅฆ‚ๆžœๆ‚จ้œ€่ฆ้‹่กŒๅคง้‡ๆฉŸๆขฐไบบ๏ผŒ็‰นๅˆฅๆ˜ฏ่ˆ‡ไฝฟ็”จ็›ธๅŒ IP ไฝๅ€็š„ๅ…ถไป– Steam ็”จๆˆถ็ซฏ/ๅทฅๅ…ทไธ€่ตท้‹่กŒ๏ผŒๅ‰‡ๅพˆๅฏ่ƒฝ้œ€่ฆๅขžๅŠ ๆญคๅ€ผ๏ผŒไปฅๅฐ‡็™ป้Œ„่ซ‹ๆฑ‚ๅˆ†ๆ•ฃๅˆฐๆ›ด้•ท็š„ๆ™‚้–“ๆฎตใ€‚

้™„่จป๏ผŒๆญคๅ€ผ้‚„็”จๆ–ผๆ‰€ๆœ‰ ASF-่จˆ็•ซๆ“ไฝœ็š„่ฒ ่ผ‰ๅนณ่กก็ทฉ่กๅ€๏ผŒไพ‹ๅฆ‚ไบคๆ˜“ๆจกๅกŠไธญ็š„ SendTradePeriodใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


MaxFarmingTime

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ10็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ 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 ๅฐ‡ๅœจ solo ๆจกๅผไธ‹ๆœ€ๅคšๅฐไธ€ๅ€‹้ŠๆˆฒๆŽ›ๅกMaxFarmingTimeๅฐๆ™‚๏ผŒไธฆ่ช็‚บๅฎƒๅœจ่ฉฒๆ™‚้–“ๅพŒๅฎŒๆˆๆ‰€ๆœ‰ๆŽ›ๅก้€ฒ็จ‹ใ€‚ ็‚บไบ†้ฟๅ…ๆŽ›ๅก้Ž็จ‹ๅœๆปฏไธๅ‰๏ผŒ้€™ๆ˜ฏๅฟ…้œ€็š„๏ผŒไฝ†ๅฆ‚ๆžœ็”ฑๆ–ผๆŸ็จฎๅŽŸๅ›  Steam ็™ผไฝˆไบ†ไธ€ๅ€‹ๆ–ฐ็š„ๅพฝ็ซ ๏ผŒๆญคๅพฝ็ซ ๅฏ่ƒฝๅฐ‡้˜ปๆ’“ ASF ็š„ๆŽ›ๅก้€ฒๅฑ•๏ผˆ่ฆ‹๏ผš้ป‘ๅๅ–ฎ๏ผ‰ใ€‚ ้ ่จญๅ€ผ 10 ๅฐๆ™‚ๆ‡‰่ฉฒ่ถณไปฅๅพžไธ€ๅ€‹้Šๆˆฒไธญ็ฒๅ–ๆ‰€ๆœ‰Steamๅกใ€‚ ๅฐ‡ๆญคๅฑฌๆ€ง่จญ็ฝฎๅพ—้ŽไฝŽๅฏ่ƒฝๆœƒๅฐŽ่‡ด่ทณ้Žๆœ‰ๆ•ˆ็š„้Šๆˆฒ๏ผˆๆ˜ฏ็š„๏ผŒๆœ‰ไบ›้Šๆˆฒ็”š่‡ณ้œ€่ฆ้•ท้”9ๅ€‹ๅฐๆ™‚ๆ‰่ƒฝๅฎŒๅ…จๅฎŒๆˆๆŽ›ๅก๏ผ‰๏ผŒ่€Œ่จญ็ฝฎๅพ—้Ž้ซ˜ๅฏ่ƒฝๆœƒๅฐŽ่‡ดๆŽ›ๅก้Ž็จ‹ๅœๆปฏไธๅ‰ใ€‚ ่ซ‹ๆณจๆ„๏ผŒๆญคๅฑฌๆ€งๅƒ…ๅฝฑ้Ÿฟๅ–ฎๅ€‹ๆŽ›ๅก้€ฒ็จ‹ไธญ็š„ๅ–ฎๅ€‹้Šๆˆฒ๏ผˆๅ› ๆญคๅœจๅฎŒๆˆๆ•ดๅ€‹้šŠๅˆ—ๅพŒ ASF ๅฐ‡่ฟ”ๅ›ž่ฉฒๆจ™้กŒ๏ผ‰๏ผŒๅฎƒไนŸไธๆ˜ฏๅŸบๆ–ผ้Šๆˆฒ็ธฝๆ™‚้–“่€Œๆ˜ฏๅŸบๆ–ผ ASF ๅ…ง้ƒจๆŽ›ๅกๆ™‚้–“๏ผŒๅ› ๆญค ASF ไนŸๅฐ‡ๅœจ้‡ๅ•ŸๅพŒ่ฟ”ๅ›žๅˆฐ่ฉฒๆจ™้กŒใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


MaxTradeHoldDuration

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ15 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉไบ†ๆˆ‘ๅ€‘้ก˜ๆ„ๆŽฅๅ—ๅคš้•ทๆ™‚้–“็š„ไบคๆ˜“ๆšซๆŽ›โ€”โ€”ๅฆ‚**ไบคๆ˜“ไธ€็ฏ€ไธญๆ‰€่ฟฐ๏ผŒ ASF ๅฐ‡ๆ‹’็ต•ๆšซๆŽ›ๆœŸ่ถ…้ŽMaxTradeHoldDurationๅคฉ็š„ไบคๆ˜“ๆๆกˆใ€‚ ๆญค้ธ้ …ๅƒ…็”จๆ–ผๅœจTradingPreferencesไธญๅ•Ÿ็”จSteamTradeMatcher็š„ๆฉŸๆขฐไบบ๏ผŒๅ› ็‚บๅฎƒไธๅฝฑ้Ÿฟไพ†่‡ชMaster/SteamOwnerID็š„ไบคๆ˜“๏ผŒๆˆ–ๆ˜ฏๆ่ดˆใ€‚ ไบคๆ˜“ๆšซๆŽ›ๆ˜ฏๅพˆ็…ฉไบบ็š„๏ผŒๆฒ’ไบบๆœƒๆƒณ่ขซๅฎƒๅ›ฐๆ“พใ€‚ ASF ๆ‡‰่ฉฒๅœจ่‡ช็”ฑ่ฆๅ‰‡ไธ‹ๅทฅไฝœ๏ผŒไธฆๅนซๅŠฉๆฏๅ€‹ไบบ๏ผŒ็„ก่ซ–ๆ˜ฏๅฆๅญ˜ๅœจไบคๆ˜“ๆšซๆŽ›โ€”โ€”้€™ๅฐฑๆ˜ฏ็‚บไป€้บผๆญค้ธ้ …็š„้ ่จญๅ€ผ็‚บ15ใ€‚ ไธ้Ž๏ผŒๅฆ‚ๆžœๆ‚จๆ›ดๅธŒๆœ›ๆ‹’็ต•ๆ‰€ๆœ‰ๆœƒ่ขซๆšซๆŽ›็š„ไบคๆ˜“ๆๆกˆ๏ผŒๆ‚จๅฏไปฅๅฐ‡ๆญคๅ€ผ่จญ็ฝฎ็‚บ0ใ€‚ ่ซ‹่€ƒๆ…ฎ้€™ๆจฃไธ€ๅ€‹ไบ‹ๅฏฆ๏ผš็ŸญๆœŸๅ…งๆœƒๅคฑๆ•ˆ็š„ๅกไธๅ—ๆญค้ธ้ …็š„ๅฝฑ้Ÿฟ๏ผŒไธฆไธ” ASF ๆœƒ่‡ชๅ‹•ๆ‹’็ต•ๅญ˜ๅœจๆšซๆŽ›็š„ไบคๆ˜“๏ผŒๅฆ‚ไบคๆ˜“**้ƒจๅˆ†ไธญๆ‰€่ฟฐ๏ผŒๆ‰€ไปฅๆฒ’ๆœ‰ๅฟ…่ฆๅ› ็‚บ้€™ๅ€‹ๅŽŸๅ› ่€Œๆ‹’็ต•ๆ‰€ๆœ‰็š„ไบบใ€‚ ้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


MinFarmingDelayAfterBlock

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ60็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ 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

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉ ASF ๅœจ้‹่กŒๆ™‚ๅๅฅฝ็š„ๅ„ชๅŒ–ๆจกๅผใ€‚ ็•ถๅ‰ ASF ๆ”ฏๆดๅ…ฉ็จฎๆจกๅผโ€”โ€”0๏ผŒๅณMaxPerformance๏ผ›1๏ผŒๅณMinMemoryUsageใ€‚ ้ ่จญๆƒ…ๆณไธ‹๏ผŒASFๅธŒๆœ›็›กๅฏ่ƒฝๅคšๅœฐไธฆ่กŒ๏ผˆๅŒๆ™‚๏ผ‰้‹่กŒ๏ผŒ้€™้€š้Ž่ทจๆ‰€ๆœ‰ CPU ๅ…งๆ ธใ€ๅคšๅ€‹ CPU ๅŸท่กŒ็ท’ใ€ๅคšๅ€‹้€š่จŠ็ซฏๅ’Œๅคšๅ€‹ๅŸท่กŒ็ท’ๆฑ ไปปๅ‹™็š„่ฒ ่ผ‰ๅนณ่กกๅทฅไฝœไพ†ๆ้ซ˜ๆ€ง่ƒฝใ€‚ 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. ้€™ๆ‡‰่ฉฒ็ธฝๆ˜ฏๆ‚จๆƒณๆƒณ่ฆ็š„๏ผŒๅ› ็‚บๅฎƒๅœจๅคงๅคšๆ•ธๆƒ…ๆณไธ‹่ƒฝไฝฟ้–‹้Šทๆœ€ๅฐๅŒ–๏ผŒ็”š่‡ณๅœจๅ–ฎๅ€‹ CPu ๅ…งๆ ธๅ’ŒๅŠŸ่€—ๆฅตๅคง็š„ๆœ€่ˆŠ็กฌ้ซ”ไธŠไนŸ่ƒฝ็œ‹ๅˆฐ็•ฐๆญฅ ASF ไปฃ็ขผ็š„ๅฅฝ่™•ใ€‚ ไฝ†ๆ˜ฏ๏ผŒ็”ฑๆ–ผ่จฑๅคšไปปๅ‹™ๆ˜ฏไธฆ่กŒ่™•็†็š„๏ผŒๅ› ๆญค ASF ้‹่กŒๆ™‚่ฒ ่ฒฌ็ถญ่ญทๅฎƒๅ€‘๏ผŒไพ‹ๅฆ‚๏ผŒ ไฟๆŒๅฅ—ๆŽฅๅญ—ๆ‰“้–‹๏ผŒ็ทš็จ‹่™•ๆ–ผๆดปๅ‹•็‹€ๆ…‹ไธฆ่™•็†ๆญฃๅœจ่™•็†็š„ไปปๅ‹™๏ผŒ้€™ๅฏ่ƒฝๆœƒไธๆ™‚ๅขžๅŠ ่จ˜ๆ†ถ้ซ”ไฝฟ็”จ้‡๏ผŒๅฆ‚ๆžœๆ‚จๅ—ๅฏ็”จ่จ˜ๆ†ถ้ซ”็š„้™ๅˆถ๏ผŒๅฏ่ƒฝ้œ€่ฆๅฐ‡ๆญคๅฑฌๆ€งๅˆ‡ๆ›็‚บ1 ๏ผˆMinMemoryUsage๏ผ‰ไปฅๅผทๅˆถ ASF ็›กๅฏ่ƒฝๅฐ‘ๅœฐไฝฟ็”จไปปๅ‹™๏ผŒไธฆไธ”้€šๅธธไปฅๅŒๆญฅๆ–นๅผ้‹่กŒๅฏ่ƒฝ็š„ไธฆ่กŒ็•ฐๆญฅไปฃ็ขผใ€‚ 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. Unless you have a strong reason to edit this property, you should keep it at default.


PluginsUpdateList

้ ่จญๅ€ผ็‚บ็ฉบ็š„ ImmutableHashSet<string> ้กžๅž‹ใ€‚ This property defines list of plugin assembly names that are either blacklisted or whitelisted for being considered for automatic updates, as per PluginsUpdateMode defined below.

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


PluginsUpdateMode

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ้กžๅž‹ใ€‚ This property defines plugins update mode that gives meaning to PluginsUpdateList defined above. By specifying this property you can easily enable/disable automatic updates for all plugins except those declared.

  • Value of 0, called Whitelist, disables automatic update of all plugins, except those defined in PluginsUpdateList.
  • Value of 1, called Blacklist, enables automatic update of all plugins, except those defined in PluginsUpdateList.

ASF team would like to remind you that, for your own safety, you should enable automatic updates only from trusted parties. Keep in mind that malicious plugins can decide to update themselves or execute remote commands regardless of this setting, this is why this setting applies to ASF-provided plugins update functionality exclusively, and you should still ensure that you've appropriately verified every plugin that you've decided to use.

Updates of plugins are performed by default along with ASF update routine - UpdateChannel and UpdatePeriod. Standard ASF update mechanisms such as update command will also trigger optional plugins update. If instead you'd like to update plugins manually without updating ASF version at the same time, updateplugins command offers such possibility.

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


ShutdownIfPossible

้ ่จญๅ€ผ็‚บ false ็š„ bool ้กžๅž‹ใ€‚ When enabled, ASF will try to shutdown the process if possible, that is, when all of your registered bots are stopped. This can be especially useful when combined with ShutdownOnFarmingFinished on all of your bot instances, since this way ASF will be allowed to automatically shutdown when the last one of your bots finishes farming.

Since the expectation of majority of the users is to have the process running at all times, e.g. for IPC usage, this option is disabled by default.


SteamMessagePrefix

้ ่จญๅ€ผ็‚บ "/me " ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉไบ†ไธ€ๅ€‹้ฆ–็ขผ, ่ฉฒ้ฆ–็ขผๅฐ‡ไฝœ็‚บASF็™ผ้€็š„ๆ‰€ๆœ‰ Steam ๆถˆๆฏ็š„้ฆ–็ขผใ€‚ ้ ่จญๆƒ…ๆณไธ‹, ASFไฝฟ็”จ"/me " ้ฆ–็ขผ, ไปฅไพฟ้€š้Žๅœจ Steam ่ŠๅคฉไธญไปฅไธๅŒ็š„้ก่‰ฒ้กฏ็คบๆฉŸๆขฐไบบๆถˆๆฏไพ†ๆ›ด่ผ•้ฌ†ๅœฐๅ€ๅˆ†ๆฉŸๆขฐไบบๆถˆๆฏใ€‚ ๅฆไธ€ๅ€‹ๅ€ผๅพ—ๆๅŠ็š„ๅœฐๆ–นๆ˜ฏ "/pre " ้ฆ–็ขผ, ๅฎƒๅฏฆ็พไบ†้กžไผผ็š„็ตๆžœ, ไฝ†ไฝฟ็”จไบ†ไธๅŒ็š„ๆ ผๅผใ€‚ ๆ‚จ้‚„ๅฏไปฅๅฐ‡ๆญคๅฑฌๆ€ง่จญ็ฝฎ็‚บ็ฉบๅญ—ไธฒๆˆ– null, ไปฅไพฟๅฎŒๅ…จ็ฆ็”จ้ฆ–็ขผ, ไธฆไปฅๅ‚ณ็ตฑๆ–นๅผ่ผธๅ‡บๆ‰€ๆœ‰ASFๆถˆๆฏใ€‚ ๅฅฝๆถˆๆฏๆ˜ฏ, ๆญคๅฑฌๆ€งๅƒ…ๅฝฑ้Ÿฟ Steam ๆถˆๆฏ-้€š้Žๅ…ถไป–้€š้“ (ๅฆ‚ IPC) ่ฟ”ๅ›ž็š„ๅ›žๆ‡‰ไธๅ—ๅฝฑ้Ÿฟใ€‚ ้™ค้žๆ‚จ่ฆ่‡ช่จ‚ๆจ™ๆบ– ASF ่กŒ็‚บ, ๅฆๅ‰‡ๆœ€ๅฅฝๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผใ€‚


SteamOwnerID

้ ่จญๅ€ผ ็‚บ0 ็š„ ulong ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งไปฅ64ไฝๅฝขๅผ็š„Steam IDๅฎš็พฉ ASF ้€ฒ็จ‹ๆ“ๆœ‰่€…๏ผŒ้กžไผผไบŽ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„ master ่จฑๅฏๆฌŠ๏ผˆไฝ†ไฝœ็”จๆ–ผๅ…จๅŸŸ๏ผ‰ใ€‚ ้€šๅธธๆ‚จๆ‡‰่ฉฒๆœƒๅธŒๆœ›ๅฐ‡ๅฑฌๆ€ง่จญ็ฝฎ็‚บๆ‚จ็š„SteamไธปๅธณๆˆถIDใ€‚ Master ่จฑๅฏๆฌŠๅŒ…ๆ‹ฌๅฐๅ…ถๆฉŸๅ™จไบบๅฏฆไพ‹็š„ๅฎŒๅ…จๆŽงๅˆถ๏ผŒ ๅƒ…SteamOwnerIDไธญๆŒ‡ๅฎš็š„็”จๆˆถๆ‰่ƒฝ็™ผไฝˆๅ…จๅŸŸๅ‘ฝไปค๏ผŒๅฆ‚ exit``restart ๆˆ– updateใ€‚ ้€™ๅพˆๆ–นไพฟ๏ผŒๅ› ็‚บไฝ ๅฏ่ƒฝๆƒณ็‚บไฝ ็š„ๆœ‹ๅ‹้‹่กŒๆฉŸๆขฐไบบ๏ผŒๅŒๆ™‚ไธๅ…่จฑไป–ๅ€‘้€š้Ž exit ไน‹้กž็š„ๅ‘ฝไปคๆŽงๅˆถ ASF ้€ฒ็จ‹ใ€‚ ้ ่จญๅ€ผ 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

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ7 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉไบ† ASF ๅœจ้€ฃๆŽฅ Steam ไผบๆœๅ™จๆ™‚ไฝฟ็”จ็š„็ถฒ็ตกๅ”่ญฐ๏ผŒๅ…ถๅฎš็พฉๅฆ‚ไธ‹๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 None ็„กๅ”่ญฐ
1 TCP ๅ‚ณ่ผธๆŽงๅˆถๅ”่ญฐ
2 UDP ็”จๆˆถๆ•ธๆ“šๅ ฑๅ”่ญฐ
4 WebSockets WebSockets

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …่ขซๅ•Ÿ็”จ๏ผŒไธฆไธ”่ฉฒ้ธ้ …ๆœฌ่บซๆœชๆ›พๆŒ‡ๅฎšๆœ‰ๆ•ˆๅ€ผใ€‚

By default ASF will use all available Steam protocols as a measure for fighting with downtimes and other similar Steam issues. Typically you want to change this property if you want to limit ASF into using only one or two specific protocols. ๅฆ‚ๆžœๆ‚จๅชๅœจ้˜ฒ็ซ็‰†ไธŠๅ•Ÿ็”จ TCP ๆต้‡๏ผŒไธฆไธ”ไธๅธŒๆœ› ASF ๅ˜—่ฉฆ้€š้Ž UDP ้€ฒ่กŒ้€ฃๆŽฅ๏ผŒๅ‰‡ๅฏ่ƒฝ้œ€่ฆ้€™ๆจฃ็š„ๆŽชๆ–ฝใ€‚ ไฝ†ๆ˜ฏ๏ผŒ้™ค้žๆ‚จๆญฃๅœจ่ชฟ่ฉฆ็‰นๅฎšๅ•้กŒๆˆ–ๆผๆดž๏ผŒๅฆๅ‰‡ๆ‚จๅนพไนŽ็ธฝๆ˜ฏๅธŒๆœ›็ขบไฟ ASF ๅฏไปฅ่‡ช็”ฑไฝฟ็”จ็•ถๅ‰ๆ”ฏๆŒ็š„ไปปไฝ•ๅ”่ญฐ๏ผŒ่€Œไธๅƒ…ๅƒ…ๆ˜ฏไธ€ๅ€‹ๆˆ–ๅ…ฉๅ€‹ใ€‚ ้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„ไฟฎๆ”นๆ„้ก˜๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ข„่จญๅ€ผใ€‚


UpdateChannel

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ1 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆญฃๅœจไฝฟ็”จ็š„ๆ›ดๆ–ฐ้€š้“๏ผŒ็”จๆ–ผ่‡ชๅ‹•ๆ›ดๆ–ฐ๏ผˆๅฆ‚ๆžœUpdatePeriodๅคงๆ–ผ0๏ผ‰๏ผŒๆˆ–ๆ”ถๅˆฐๆ›ดๆ–ฐ้€š็Ÿฅๆ™‚๏ผˆๅ…ถไป–ๆƒ…ๆณ๏ผ‰ใ€‚ Currently ASF supports three update channels - 0 which is called None, 1, which is called Stable, and 2, which is called PreRelease. ็ฉฉๅฎš็‰ˆ้€š้“ๆ˜ฏ้ ่จญๅ€ผ๏ผŒ้ฉ็”จๆ–ผๅคงๅคšๆ•ธ็”จๆˆถใ€‚ PreRelease channel in addition to Stable releases, also includes pre-releases dedicated for advanced users and other developers in order to test new features, confirm bugfixes or give feedback about planned enhancements. PreRelease versions often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don't consider yourself advanced user, please stay with default 1 (Stable) update channel. PreRelease channel is dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. ๅฆ‚ๆžœๆ‚จๆƒณไบ†่งฃๆ›ดๅคš่ณ‡่จŠ๏ผŒ่ซ‹ๆŸฅ็œ‹ ASF ็™ผๅธƒๅ‘จๆœŸใ€‚ ๅฆ‚ๆžœ่ฆๅฎŒๅ…จ็ฆ็”จๆ‰€ๆœ‰็‰ˆๆœฌๆ›ดๆ–ฐ๏ผŒ้‚„ๅฏไปฅๅฐ‡UpdateChannel่จญ็ฝฎ็‚บ0๏ผˆNone๏ผ‰ใ€‚ ๅฐ‡ UpdateChannel ่จญ็ฝฎ็‚บ 0 ๅฐ‡ๅฎŒๅ…จ็ฆ็”จ่ˆ‡ๆ›ดๆ–ฐ็›ธ้—œ็š„ๆ•ดๅ€‹ๅŠŸ่ƒฝ, ๅŒ…ๆ‹ฌ update ๅ‘ฝไปคใ€‚ ๅผท็ƒˆๅปบ่ญฐไธ่ฆไฝฟ็”จNone้€š้“๏ผŒๅ› ็‚บๆ‚จๆœƒ้‡ๅˆฐๅ„็จฎๅ•้กŒ๏ผˆๅœจไธ‹้ข็š„UpdatePeriod่ชชๆ˜Žไธญๆๅˆฐ๏ผ‰ใ€‚

้™ค้žๆ‚จ็Ÿฅ้“ๆ‚จๅœจๅšไป€้บผ๏ผŒๅฆๅ‰‡ๆˆ‘ๅ€‘ ๅผท็ƒˆ ๅปบ่ญฐไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


UpdatePeriod

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ24 ็š„ byte flags ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉ ASF ๆชขๆŸฅ่‡ชๅ‹•ๆ›ดๆ–ฐ็š„้ ป็Ž‡ใ€‚ ๆ›ดๆ–ฐไธๅƒ…ๅฐๆ–ผๆŽฅๆ”ถๆ–ฐๅŠŸ่ƒฝๅ’Œ้—œ้ตๅฎ‰ๅ…จไฟฎ่ฃœ็จ‹ๅผ่‡ณ้—œ้‡่ฆ, ่€Œไธ”ๅฐๆ–ผๆŽฅๆ”ถ้Œฏ่ชคไฟฎๅพฉใ€ๆ€ง่ƒฝๅขžๅผทใ€็ฉฉๅฎšๆ€งๆ”น้€ฒ็ญ‰ไนŸ่‡ณ้—œ้‡่ฆใ€‚ ็•ถ่จญ็ฝฎๅคงๆ–ผ0็š„ๅ€ผๆ™‚๏ผŒASF ๅฐ‡ๅœจๆ–ฐ็‰ˆๆœฌๅฏ็”จๆ™‚่‡ชๅ‹•ไธ‹่ผ‰๏ผŒๆ›ฟๆ›ไธฆ้‡ๆ–ฐๅ•Ÿๅ‹•๏ผˆๅฆ‚ๆžœAutoRestart่ขซๅ•Ÿ็”จ๏ผ‰ใ€‚ ็‚บไบ†ๅฏฆ็พ้€™ไธ€็›ฎๆจ™, ASFๅฐ‡ๆฏ UpdatePeriod ๅฐๆ™‚ๆชขๆŸฅไธ€ๆฌกๆˆ‘ๅ€‘็š„GitHub ๅญ˜ๅ„ฒๅบซไธŠๆ˜ฏๅฆๆœ‰ๆ–ฐ็š„ๆ›ดๆ–ฐใ€‚ ๆญคๅ€ผ็‚บ 0 ๆ™‚็ฆ็”จ่‡ชๅ‹•ๆ›ดๆ–ฐ๏ผŒไฝ†ๆ‚จไปๅฏๆ‰‹ๅ‹•ๅŸท่กŒ update ๅ‘ฝไปคใ€‚ ๆ‚จๅฏ่ƒฝ้‚„ๆœ‰่ˆˆ่ถฃไบ†่งฃ่จญ็ฝฎ UpdatePeriod ๆ‡‰้ตๅพช็š„้ฉ็•ถ UpdateChannelใ€‚

ASF ็š„ๆ›ดๆ–ฐ้Ž็จ‹ๆถ‰ๅŠ ASF ๆญฃๅœจไฝฟ็”จ็š„ๆ•ดๅ€‹่ณ‡ๆ–™ๅคพ็ตๆง‹็š„ๆ›ดๆ–ฐ๏ผŒไฝ†ไธๆถ‰ๅŠไฝๆ–ผconfig็›ฎ้Œ„ไธญๆ‚จ่‡ชๅทฑ็š„้…็ฝฎๆˆ–ๆ•ธๆ“šๅบซโ€”โ€”ๆ„ๅ‘ณ่‘—ๅœจๅ…ถ็›ฎ้Œ„ไธญ่ˆ‡ ASF ็„ก้—œ็š„ไปปไฝ•้กๅค–ๆช”ๅฏ่ƒฝๆœƒๅœจๆ›ดๆ–ฐๆœŸ้–“ไธŸๅคฑใ€‚ 24็š„้ป˜่ชๅ€ผๆ˜ฏไธๅฟ…่ฆ็š„ๆชขๆŸฅๅ’Œ็ถญๆŒ ASF ๆ›ดๆ–ฐไน‹้–“็š„่‰ฏๅฅฝๅนณ่กกใ€‚

้™ค้žๆ‚จๆœ‰ๅผท็ƒˆ็š„็†็”ฑ่ฆ็ฆ็”จๆญคๅŠŸ่ƒฝ๏ผŒๅฆๅ‰‡ๆ‚จๆ‡‰่ฉฒๅœจๅˆ็†็š„UpdatePeriod ไธญๅ•Ÿ็”จ่‡ชๅ‹•ๆ›ดๆ–ฐ๏ผŒ้€™ๆ˜ฏๅ‡บๆ–ผ็‚บๆ‚จ่‡ชๅทฑๅˆฉ็›Š็š„่€ƒๆ…ฎใ€‚ ้€™ไธๅƒ…ๆ˜ฏๅ› ็‚บๆˆ‘ๅ€‘ไธๆ”ฏๆดๆœ€ๆ–ฐ็š„็ฉฉๅฎš ASF ็‰ˆๆœฌ็ฏ„ๅœไน‹ๅค–็š„ไบ‹ๆƒ…๏ผŒ้‚„ๅ› ็‚บๆˆ‘ๅ€‘ๅƒ…็‚บๆœ€ๆ–ฐ็‰ˆๆœฌๆไพ›ๅฎ‰ๅ…จไฟ้šœใ€‚ ๅฆ‚ๆžœๆ‚จไฝฟ็”จ็š„ๆ˜ฏ้Žๆ™‚็š„ASF็‰ˆๆœฌ๏ผŒ้‚ฃ้บผๆ‚จๅฏ่ƒฝๅฐ‡่‡ชๅทฑๆšด้œฒๆ–ผๅ„็จฎๅ•้กŒ๏ผŒๅพžๅฐ้Œฏ่ชคๅˆฐๅŠŸ่ƒฝๆๅฃž๏ผŒไปฅ**Steam ๅธณๆˆถๆฐธไน…ๅฐ้Ž–ๅ‘Š็ต‚๏ผŒๆ‰€ไปฅ็‚บไบ†ๆ‚จ่‡ชๅทฑ็š„ๅˆฉ็›Š๏ผŒๆˆ‘ๅ€‘ๅผท็ƒˆๆŽจ่–ฆ**็ขบไฟๆ‚จ็š„ ASF ็‰ˆๆœฌๆ˜ฏๆœ€ๆ–ฐ็š„ใ€‚ ่‡ชๅ‹•ๆ›ดๆ–ฐๅ…่จฑๆˆ‘ๅ€‘่ƒฝๅค ๅœจๅ‡็ดšไน‹ๅ‰็ฆ็”จๆˆ–ไฟฎ่ฃœๆœ‰ๅ•้กŒ็š„ไปฃ็ขผ๏ผŒๅพž่€Œๅฟซ้€Ÿๆ‡‰ๅฐๆ‰€ๆœ‰้กžๅž‹็š„ๅ•้กŒโ€”โ€”ๅฆ‚ๆžœๆ‚จ้ธๆ“‡้€€ๅ‡บๅฎƒ๏ผŒๆ‚จๅฐ‡ๅคฑๅŽปๆˆ‘ๅ€‘็š„ๆ‰€ๆœ‰ๅฎ‰ๅ…จไฟ้šœ๏ผŒไธฆไธ”้œ€่ฆ่‡ช่กŒๆ‰ฟๆ“”้‹่กŒๅฏ่ƒฝๆœ‰ๅฎณ็š„ไปฃ็ขผๆ‰€ๅธถไพ†็š„้ขจ้šชๅพŒๆžœ๏ผŒ ไธๅƒ…ๆ˜ฏไพ†่‡ช Steam ็ถฒ็ตก็š„ๅจ่„…๏ผŒ้‚„๏ผˆ้กงๅๆ€็พฉ๏ผ‰ๆ‚จ่‡ชๅทฑ็š„ Steam ๅธณๆˆถใ€‚


WebLimiterDelay

้ ่จญๅ€ผ็‚บ 300 ็š„ ushort ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅ‘ๅŒไธ€ Steam Web ๆœๅ‹™็™ผ้€ๅ…ฉๅ€‹้€ฃ็บŒ่ซ‹ๆฑ‚ไน‹้–“็š„ๆœ€ๅฐๅปถ้ฒ๏ผˆไปฅๆฏซ็ง’็‚บๅ–ฎไฝ๏ผ‰ใ€‚ ๆญค้กžๅปถ้ฒๆ˜ฏๅฟ…่ฆ็š„๏ผŒๅ› ็‚บ Steam ๅ…ง้ƒจไฝฟ็”จ** AkamaiGhost **ๆœๅ‹™ๅœจ็ตฆๅฎš็š„ๆ™‚้–“ๆฎต้™ๅˆถๅŸบๆ–ผๅ…จๅŸŸ่ซ‹ๆฑ‚ๆ•ธ้‡็š„้€Ÿ็Ž‡ใ€‚ ๅœจๆญฃๅธธๆƒ…ๆณไธ‹๏ผŒakamai ้™ๅˆถๅพˆ้›ฃ่งธ็™ผ๏ผŒไฝ†ๆ˜ฏๅฆ‚ๆžœๆˆ‘ๅ€‘ๅœจๅคช็Ÿญ็š„ๆ™‚้–“ๅ…งไธๆ–ท็™ผ้€้Žๅคš่ซ‹ๆฑ‚๏ผŒๅฐŽ่‡ด้žๅธธ็น้‡็š„ๅทฅไฝœ่ฒ ่ผ‰ๅ’Œๅคง้‡ๆญฃๅœจ้€ฒ่กŒ็š„่ซ‹ๆฑ‚้šŠๅˆ—๏ผŒๅ‰‡ๅฏ่ƒฝ่งธ็™ผๅฎƒใ€‚

้ ่จญๅ€ผๆ˜ฏๅŸบๆ–ผ ASF ๆ˜ฏ่จชๅ•ๅ„็จฎ Steam Web ๆœๅ‹™็š„ๅ”ฏไธ€ๅทฅๅ…ทไพ†่จญๅฎš็š„๏ผŒ็‰นๅˆฅๆ˜ฏ steamcommunity.com๏ผŒapi.steampowered.com ๅ’Œstore.steampowered.comใ€‚ ๅฆ‚ๆžœๆ‚จๆญฃๅœจไฝฟ็”จๅ…ถไป–ๅทฅๅ…ทๅ‘ๅŒไธ€ Web ๆœๅ‹™็™ผ้€่ซ‹ๆฑ‚๏ผŒ้‚ฃ้บผๆ‚จๆ‡‰่ฉฒ็ขบไฟๆ‚จ็š„ๅทฅๅ…ทๅŒ…ๅซ้กžไผผWebLimiterDelay็š„ๅŠŸ่ƒฝ๏ผŒไธฆๅฐ‡ๅ…ฉ่€…้ƒฝ่จญ็ฝฎ็‚บ้ ่จญๅ€ผ็š„ๅ…ฉๅ€๏ผŒๅณ600ใ€‚ ้€™ไฟ่ญ‰ไบ†ๅœจไปปไฝ•ๆƒ…ๆณไธ‹๏ผŒๆ‚จ้ƒฝไธๆœƒๆฏ 300 ๆฏซ็ง’็™ผ้€่ถ…้Ž1ๅ€‹็š„่ซ‹ๆฑ‚ใ€‚

้€šๅธธ๏ผŒๆˆ‘ๅ€‘ๅผท็ƒˆๅๅฐ้™ไฝŽWebLimiterDelay็š„้ ่จญๅ€ผ๏ผŒๅ› ็‚บๅฎƒๅฏ่ƒฝๆœƒๅฐŽ่‡ดๅ„็จฎ่ˆ‡ IP ็›ธ้—œ็š„ๅฐ้Ž–๏ผŒๅ…ถไธญไธ€ไบ›ๅฐ้Ž–ๅฏ่ƒฝๆ˜ฏๆฐธไน…ๆ€ง็š„ใ€‚ ้ ่จญๅ€ผ่ถณไปฅๅœจไผบๆœๅ™จไธŠ้‹่กŒๅ–ฎๅ€‹ ASF ๅฏฆไพ‹๏ผŒไปฅๅŠๅœจๆญฃๅธธๆƒ…ๆณไธ‹่ˆ‡ๅŽŸๅง‹ Steam ็”จๆˆถ็ซฏไธ€่ตทไฝฟ็”จ ASFใ€‚ It should be correct for majority of usages, and you should only increase it (never lower it). ็ฐก่€Œ่จ€ไน‹๏ผŒๅพžๅ–ฎๅ€‹ IP ็™ผ้€ๅˆฐๅ–ฎๅ€‹ Steam ๅŸŸ็š„ๆ‰€ๆœ‰ๅ…จๅŸŸ่ซ‹ๆฑ‚็š„ๆ•ธ้‡ไธๆ‡‰่ถ…้Žๆฏ 300 ๆฏซ็ง’1ๅ€‹ใ€‚

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


WebProxy

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉไบ†ไธ€ๅ€‹ Web ไปฃ็†ๅœฐๅ€๏ผŒ่ฉฒๅœฐๅ€ๅฐ‡็”จๆ–ผ ASF ็š„HttpClient็™ผ้€็š„ๆ‰€ๆœ‰ๅ…ง้ƒจhttpๅ’Œhttps่ซ‹ๆฑ‚๏ผŒๅฐคๅ…ถๆ˜ฏๅฐๆ–ผgithub.com๏ผŒsteamcommunity.comๅ’Œstore.steampowered.comใ€‚ ไธ€่ˆฌไพ†่ชช๏ผŒ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่ซ‹ๆฑ‚ไฝฟ็”จWebไปฃ็†๏ผŒไธๅŒ…ๆ‹ฌๅœจ ASF ๅ…ง้ƒจ Steam ๅฎขๆˆถ็ซฏๅ…ง็š„ๅ…ง้ƒจ Steam ็ถฒ็ตก้€šไฟกใ€‚ ็•ถๅ‰ๆฒ’ๆœ‰ๆ”ฏๆด้€™ไธ€้ปž็š„่จˆ็•ซ๏ผŒไธป่ฆๅŽŸๅ› ๆ˜ฏ็ผบๅฐ‘ SK2 ๅŠŸ่ƒฝใ€‚ ๅฆ‚ๆžœไฝ ๆƒณๅฏฆ็พๅฎƒ๏ผŒๆˆ‘ๅปบ่ญฐๅพžๆญค่™•้–‹ๅง‹ใ€‚

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


WebProxyPassword

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅœจๆไพ›ไปฃ็†ๅŠŸ่ƒฝ็š„็›ฎๆจ™WebProxy้›ป่…ฆๆ”ฏๆด็š„ๅŸบๆœฌใ€ๆ‘˜่ฆใ€NTLMๅ’ŒKerberos ่บซไปฝ้ฉ—่ญ‰ไธญไฝฟ็”จ็š„ๅฏ†็ขผๅญ—ๆฎตใ€‚ ๅฆ‚ๆžœๆ‚จ็š„ไปฃ็†ไธ้œ€่ฆ็”จๆˆถๆ†‘ๆ“š๏ผŒๅ‰‡็„ก้œ€ๅœจๆญค่™•่ผธๅ…ฅไปปไฝ•ๅ…งๅฎนใ€‚ ๅชๆœ‰ๅœจๅ•Ÿ็”จ WebProxy ๆ™‚๏ผŒไฝฟ็”จๆญค้ธ้ …ๆ‰ๆœ‰ๆ„็พฉ๏ผŒๅฆๅ‰‡ๅฎƒๆฒ’ๆœ‰ไปปไฝ•ๆ•ˆๆžœใ€‚

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


WebProxyUsername

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅœจๆไพ›ไปฃ็†ๅŠŸ่ƒฝ็š„็›ฎๆจ™WebProxy้›ป่…ฆไธญไฝฟ็”จ็š„ๅŸบๆœฌใ€ๆ‘˜่ฆใ€NTLM ๅ’Œ Kerberos ่บซไปฝ้ฉ—่ญ‰ไธญไฝฟ็”จ็š„ๅฏ†็ขผๅญ—ๆฎตใ€‚ ๅฆ‚ๆžœๆ‚จ็š„ไปฃ็†ไธ้œ€่ฆ็”จๆˆถๆ†‘ๆ“š๏ผŒๅ‰‡็„ก้œ€ๅœจๆญค่™•่ผธๅ…ฅไปปไฝ•ๅ…งๅฎนใ€‚ ๅชๆœ‰ๅœจๅ•Ÿ็”จ WebProxy ๆ™‚๏ผŒไฝฟ็”จๆญค้ธ้ …ๆ‰ๆœ‰ๆ„็พฉ๏ผŒๅฆๅ‰‡ๅฎƒๆฒ’ๆœ‰ไปปไฝ•ๆ•ˆๆžœใ€‚

้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


ๆฉŸๆขฐไบบ้…็ฝฎ

ๆญฃๅฆ‚ๆ‚จๆ‡‰่ฉฒ็Ÿฅ้“็š„๏ผŒๆฏๅ€‹ๆฉŸๆขฐไบบ้ƒฝๆ‡‰่ฉฒๆœ‰ๅŸบๆ–ผไธ‹้ข็š„็คบไพ‹JSON็ตๆง‹็š„็จ็ซ‹้…็ฝฎใ€‚ ๅพžๆฑบๅฎšๅฆ‚ไฝ•ๅ‘ฝๅๆฉŸๆขฐไบบ้–‹ๅง‹๏ผˆไพ‹ๅฆ‚1.json๏ผŒmain.json๏ผŒprimary.jsonๆˆ–AnythingElse.json๏ผ‰ไธฆ่ฝ‰ๅ‘้…็ฝฎใ€‚

**่ซ‹่ฌน่จ˜๏ผš**ๆฉŸๆขฐไบบไธ่ƒฝ่ขซ่ƒฝๅ‘ฝๅ็‚บASF๏ผˆๅ› ็‚บ่ฉฒ้—œ้ตๅญ—ๆ˜ฏ็‚บๅ…จๅŸŸ้…็ฝฎไฟ็•™็š„๏ผ‰๏ผŒASF ไนŸๆœƒๅฟฝ็•ฅไปฅ้ปž้–‹้ ญ็š„ๆ‰€ๆœ‰้…็ฝฎๆช”ใ€‚

ๆฉŸๆขฐไบบ้…็ฝฎๅ…ทๆœ‰ไปฅไธ‹็ตๆง‹๏ผš

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

ไปฅไธ‹ๆ˜ฏๅฐๆ‰€ๆœ‰้ธ้ …็š„่งฃ้‡‹๏ผš

AcceptGifts

้ ่จญๅ€ผ็‚บ false ็š„ bool ้กžๅž‹ใ€‚ ๅ•Ÿ็”จๅพŒ๏ผŒASF ๅฐ‡่‡ชๅ‹•ๆŽฅๅ—ไธฆๅ…Œๆ›็™ผ้€็ตฆๆฉŸๆขฐไบบ็š„ๆ‰€ๆœ‰ Steam ็ฆฎๅ“๏ผˆๅŒ…ๆ‹ฌ้ŒขๅŒ…็ฆฎๅ“ๅก๏ผ‰ใ€‚ ้€™้‚„ๅŒ…ๆ‹ฌไพ†่‡ชSteamUserPermissionsไธญๅฎš็พฉ็š„็”จๆˆถไปฅๅค–็š„็”จๆˆถ็š„็ฆฎ็‰ฉใ€‚ ่ซ‹่จ˜ไฝ๏ผŒ็™ผ้€ๅˆฐ้›ปๅญ้ƒตไปถๅœฐๅ€็š„็ฆฎ็‰ฉไธๆœƒ็›ดๆŽฅ่ฝ‰็™ผ็ตฆๅฎขๆˆถ็ซฏ๏ผŒๅ› ๆญค ASF ไธ่ƒฝๅœจๆฒ’ๆœ‰ๆ‚จๅนซๅŠฉ็š„ๆƒ…ๆณไธ‹ๆŽฅๅ—้€™ไบ›็ฆฎ็‰ฉใ€‚

ๅปบ่ญฐๅƒ…ๅฐๅ‚™็”จๅธณๆˆถไฝฟ็”จๆญค้ธ้ …๏ผŒๅ› ็‚บๆ‚จๅพˆๅฏ่ƒฝไธๅธŒๆœ›่‡ชๅ‹•ๅ…Œๆ›็™ผ้€ๅˆฐไธปๅธณๆˆถ็š„ๆ‰€ๆœ‰็ฆฎๅ“ใ€‚ ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎšๆ˜ฏๅฆ่ฆๅ•Ÿ็”จๆญคๅŠŸ่ƒฝ๏ผŒ่ซ‹ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผfalseใ€‚


BotBehaviour

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅ„็จฎไบ‹ไปถไธญ็š„ 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

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

ไธ€่ˆฌๆƒ…ๆณไธ‹๏ผŒๅฆ‚ๆžœๆ‚จๅธŒๆœ›ASFๅŸท่กŒ่ˆ‡ๅ…ถๆดปๅ‹•็›ธ้—œ็š„ไธ€ๅฎšๆ•ธ้‡็š„่‡ชๅ‹•ๅŒ–๏ผŒๅ‰‡้œ€่ฆไฟฎๆ”นๆญคๅฑฌๆ€ง๏ผŒๅ› ็‚บๅฎƒๅฏ่ƒฝไพ†่‡ชๆฉŸๆขฐไบบๅธณๆˆถ๏ผŒ่€Œไธๆ˜ฏASFไธญไฝฟ็”จ็š„ไธป่ฆๅธณๆˆถใ€‚ ๅ› ๆญค๏ผŒๆ›ดๆ”นๆญคๅฑฌๆ€งไธป่ฆ้ฉ็”จๆ–ผๅ‚™็”จๅธณๆˆถ๏ผŒๅ„˜็ฎกๆ‚จไนŸๅฏไปฅ่‡ช็”ฑไฝฟ็”จไธปๅธณๆˆถ็š„้ธๅฎš้ธ้ …ใ€‚

Normal (None) ASF behaviour is to only automate things that user wants (e.g. cards farming or SteamTradeMatcher offers processing, if set in TradingPreferences). ้€™ๆ˜ฏๆœ€ๅฐ‘ไพตๅ…ฅๆ€ง็š„ๆจกๅผ๏ผŒๅฎƒๅฐๅคงๅคšๆ•ธ็”จๆˆถ้ƒฝๆœ‰ๅฅฝ่™•๏ผŒๅ› ็‚บๆ‚จๅฏไปฅๅฎŒๅ…จๆŽงๅˆถๆ‚จ็š„ๅธณๆˆถ๏ผŒไธฆไธ”ๆ‚จๅฏไปฅๆฑบๅฎšๆ˜ฏๅฆๅ…่จฑๆŸไบ›่ถ…ๅ‡บ็ฏ„ๅœ็š„ไบคไบ’ใ€‚

็„กๆ•ˆๅฅฝๅ‹้‚€่ซ‹ๆ˜ฏไพ†่‡ชๅฐ็•ถๅ‰ๅธณๆˆถไธๅ…ทๆœ‰FamilySharingๆฌŠ้™๏ผˆๅœจSteamUserPermissionsไธญๅฎš็พฉ๏ผ‰ๆˆ–ๆ›ด้ซ˜ๆฌŠ้™็š„็”จๆˆถ็š„ๅฅฝๅ‹้‚€่ซ‹ใ€‚ ๆญฃๅธธๆจกๅผไธ‹็š„ ASF ๆœƒๅฟฝ็•ฅ้€™ไบ›้‚€่ซ‹๏ผŒๆญฃๅฆ‚ๆ‚จๆ‰€ๆœŸๆœ›็š„้‚ฃๆจฃ๏ผŒ่ฎ“ๆ‚จๅฏไปฅ่‡ช็”ฑ้ธๆ“‡ๆ˜ฏๅฆๆŽฅๅ—้€™ไบ›้‚€่ซ‹ใ€‚ ๅ•Ÿ็”จRejectInvalidFriendInvitesๆœƒๅฐŽ่‡ด้€™ไบ›้‚€่ซ‹่ขซ่‡ชๅ‹•ๆ‹’็ต•๏ผŒ้€™ๅฏฆ้š›ไธŠๆœƒ็ฆ็”จๅ…ถไป–ไบบๅฐ‡ๆ‚จๆทปๅŠ ๅˆฐไป–ๅ€‘็š„ๆœ‹ๅ‹ๅˆ—่กจ๏ผˆๅ› ็‚บASFๅฐ‡ๆ‹’็ต•ๆ‰€ๆœ‰ๆญค้กž่ซ‹ๆฑ‚๏ผŒ้™คไบ† 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. ASF็„กๆณ•ๆถˆ้™ค้€š็Ÿฅๆœฌ่บซ๏ผŒๅ› ็‚บๅฎƒไพ†่‡ชๆ‚จ็š„Steamๅฎขๆˆถ็ซฏ๏ผŒไฝ†ๅฎƒ่ƒฝๅค ๅœจๆ”ถๅˆฐ้€š็ŸฅๅพŒ่‡ชๅ‹•ๆธ…้™ค้€š็Ÿฅ๏ผŒ้€™ๅฐ‡ไธๅ†็•™ไธ‹โ€œๅบซๅญ˜ไธญ็š„ๆ–ฐ้ …็›ฎโ€้€š็Ÿฅใ€‚ 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. ๆญค้ธ้ …่ˆ‡lootๅ‘ฝไปค็š„ไฝœ็”จ็›ธๅŒ๏ผŒๅ› ๆญค่ซ‹่ฌน่จ˜๏ผŒ้ฆ–ๅ…ˆๆ‚จ้œ€่ฆๆœ‰ๆ•ˆ็š„SteamTradeToken๏ผŒ ไธฆไฝฟ็”จๅฏฆ้š›ๆœ‰่ณ‡ๆ ผ้€ฒ่กŒไบคๆ˜“็š„ๅธณๆˆถ๏ผŒไธ”ๅชๆœ‰MasterๆฌŠ้™้›†็š„็”จๆˆถๆ‰่ƒฝๅŸท่กŒใ€‚

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

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
3 FoilTradingCard ้–ƒไบฎ้กžๅž‹็š„TradingCard
5 TradingCard Steamไบคๆ˜“ๅก็‰‡๏ผŒๅฏ็”จๆ–ผๅˆๆˆๅพฝ็ซ  (้ž้–ƒๅก๏ผ‰

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

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

ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎšๅฆ‚ไฝ•้…็ฝฎๆญค้ธ้ …๏ผŒๆœ€ๅฅฝๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผใ€‚


CustomGamePlayedWhileFarming

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ็•ถASFๆŽ›ๅกๆ™‚๏ผŒๅฎƒๅฏไปฅ้กฏ็คบ็‹€ๆ…‹็‚บโ€œ็Žฉ้žSteam้Šๆˆฒ๏ผšCustomGamePlayedWhileFarmingโ€่€Œไธๆ˜ฏ็•ถๅ‰ๆŽ›ๅก็š„้Šๆˆฒใ€‚ ๅฆ‚ๆžœๆ‚จๆƒณ่ฎ“ๆ‚จ็š„ๆœ‹ๅ‹็Ÿฅ้“ๆ‚จๆญฃๅœจๆŽ›ๅก๏ผŒไฝ†ๆ‚จไธๆƒณไฝฟ็”จOffline็š„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

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ้กžไผผๆ–ผ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

้ ่จญๅ€ผ็‚บ false ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆฉŸๆขฐไบบๆ˜ฏๅฆๅ•Ÿ็”จใ€‚ ๅ•Ÿ็”จ็š„ๆฉŸๆขฐไบบๅฏฆไพ‹๏ผˆtrue๏ผ‰ๅฐ‡ๅœจASF้‹่กŒๆ™‚่‡ชๅ‹•ๅ•Ÿๅ‹•๏ผŒ่€Œ็ฆ็”จ็š„ๆฉŸๆขฐไบบๅฏฆไพ‹๏ผˆfalse๏ผ‰ๅฐ‡้œ€่ฆๆ‰‹ๅ‹•ๅ•Ÿๅ‹•ใ€‚ ้ป˜่ชๆƒ…ๆณไธ‹๏ผŒๆฏๅ€‹ๆฉŸๆขฐไบบ้ƒฝ่ขซ็ฆ็”จ๏ผŒๅ› ๆญคๆ‚จๅฏ่ƒฝๅธŒๆœ›ๅฐ‡ๆ‡‰่‡ชๅ‹•ๅ•Ÿๅ‹•็š„ๆ‰€ๆœ‰ๆฉŸๆขฐไบบ็š„ๆญคๅฑฌๆ€งๅˆ‡ๆ›็‚บtrueใ€‚


FarmingOrders

ImmutableList<byte> type with default value of being empty. ๆญคๅฑฌๆ€งๅฎš็พฉASF็”จๆ–ผ็ตฆๅฎšๆฉŸๆขฐไบบๅธณๆˆถ็š„้ฆ–้ธๆŽ›ๅก้ †ๅบใ€‚ ็•ถๅ‰ๅฏ้ธ็š„ๆŽ›ๅกไฝ‡ๅˆ—ๅฆ‚ไธ‹๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 Unordered ็„กๅบ๏ผŒ็•ฅๅพฎๆ้ซ˜CPUๆ€ง่ƒฝ
1 AppIDsAscending ๅ˜—่ฉฆๅ„ชๅ…ˆๅฐ appIDs ๆœ€ๅฐ็š„้Šๆˆฒ้€ฒ่กŒๆŽ›ๅก
2 AppIDsDescending ๅ˜—่ฉฆๅ„ชๅ…ˆๅฐ appIDs ๆœ€ๅคง็š„้Šๆˆฒ้€ฒ่กŒๆŽ›ๅก
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้ †ๅบๅ—ๆ‰€้ธ** ๆŽ›ๅก็ฎ—ๆณ•**็š„ๅฝฑ้Ÿฟ๏ผŒไธฆไธ”ๆŽ’ๅบๅฐ‡ๅƒ…ๅฝฑ้ŸฟASF่ช็‚บๆ€ง่ƒฝ็›ธๅŒ็š„็ตๆžœใ€‚ ไพ‹ๅฆ‚๏ผŒๅœจSimple็ฎ—ๆณ•ไธญ๏ผŒๅœจ็•ถๅ‰็š„ๆŽ›ๅกๆœƒ่ฉฑไธญๆ‡‰่ฉฒๅฎŒๅ…จ้ตๅพชๆ‰€้ธ็š„FarmingOrders๏ผˆๅ› ็‚บๆฏๅ€‹้Šๆˆฒๅ…ทๆœ‰็›ธๅŒ็š„ๆ€ง่ƒฝๅ€ผ๏ผ‰๏ผŒ่€ŒๅœจComplex็ฎ—ๆณ•ไธญ๏ผŒๅฏฆ้š›้ †ๅบ้ฆ–ๅ…ˆๅ—้Šๆˆฒๆ™‚้–“ๅฝฑ้Ÿฟ๏ผŒ็„ถๅพŒๆ นๆ“šๆ‰€้ธFarmingOrders้€ฒ่กŒๆŽ’ๅบใ€‚ ้€™ๅฐ‡ๅฐŽ่‡ดไธๅŒ็š„็ตๆžœ๏ผŒๅ› ็‚บๅ…ทๆœ‰้Šๆˆฒๆ™‚้–“็š„้Šๆˆฒๅฐ‡ๅ„ชๅ…ˆๆ–ผๅ…ถไป–้Šๆˆฒ๏ผŒๅ› ๆญคASFๅฐ‡้ฆ–ๅ…ˆๅ„ชๅ…ˆ้ธๆ“‡้Šๆˆฒๆ™‚้–“ๆปฟ่ถณๆ‰€้œ€็š„HoursUntilCardDrops็š„้Šๆˆฒ๏ผŒ็„ถๅพŒๅƒ…้€š้Žๆ‚จ้ธๆ“‡็š„ FarmingOrders้€ฒไธ€ๆญฅๅฐ้€™ไบ›้Šๆˆฒ้€ฒ่กŒๆŽ’ๅบใ€‚ ๅŒๆจฃ๏ผŒไธ€ๆ—ฆASFๅฎŒๆˆๅฐ็ฝฎ้ ‚้Šๆˆฒ็š„ๆŽ›ๅก๏ผŒๅฎƒๅฐ‡้ฆ–ๅ…ˆๆŒ‰้Šๆˆฒๆ™‚้–“ๅฐๅ‰ฉ้ค˜้šŠๅˆ—ๆŽ’ๅบ๏ผˆๅ› ็‚บ้€™ๅฐ‡ๆธ›ๅฐ‘ๅฐ‡ไปปไฝ•ๅ‰ฉ้ค˜้ŠๆˆฒๆŽ›ๅกไปฅ้”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.


FarmingPreferences

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ๅฑฌๆ€งใ€‚ This property defines ASF behaviour related to farming, and is defined as below:

ๅ€ผ ๅ็จฑ
0 None
1 FarmingPausedByDefault
2 ShutdownOnFarmingFinished
4 SendOnFarmingFinished
8 FarmPriorityQueueOnly
16 SkipRefundableGames
32 SkipUnplayedGames
64 EnableRiskyCardsDiscovery
256 AutoUnpackBoosterPacks

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

All of the options are described below.

FarmingPausedByDefault defines initial state of CardsFarmer module. Normally bot will automatically start farming when it's started, either because of Enabled or start command. Using FarmingPausedByDefault can be used if you want to manually resume automatic farming process, for example because you want to use play all the time and never use automatic CardsFarmer module - this works exactly the same as pause command.

ShutdownOnFarmingFinished allows you to shutdown bot once it's done farming. Normally ASF is "occupying" an account for the whole time of process being active. ็•ถ็ตฆๅฎšๅธณๆˆถๅฎŒๆˆๆŽ›ๅกไน‹ๅพŒ๏ผŒASF ๆœƒๅฎšๆœŸ๏ผˆๆฏๅ€‹IdleFarmingPeriodๅฐๆ™‚๏ผ‰ๆชขๆŸฅๅธณๆˆถ็‹€ๆ…‹๏ผŒๅฆ‚ๆžœๅœจๆญคๆœŸ้–“ๆ–ฐๅขžไบ†ไธ€ไบ›ๅธถๆœ‰ Steam ๅก็š„ๆ–ฐ้Šๆˆฒ๏ผŒ้‚ฃ้บผๅฎƒๅฏไปฅๅœจ็„ก้œ€้‡ๅ•“็š„ๆƒ…ๆณไธ‹ๆขๅพฉ่ฉฒๅธณๆˆถ็š„ๆŽ›ๅก้€ฒ็จ‹ใ€‚ ้€™ๅฐๅคงๅคšๆ•ธไบบ้ƒฝๅพˆๆœ‰็”จ๏ผŒๅ› ็‚บ ASF ๅฏไปฅๅœจ้œ€่ฆๆ™‚่‡ชๅ‹•ๅพฉๅŽŸๆŽ›ๅกใ€‚ However, you may actually want to stop the process when given account is fully farmed, you can achieve that by using this flag. ๅ•Ÿ็”จๅพŒ๏ผŒASF ๅฐ‡ๅœจๅธณๆˆถๅฎŒๅ…จ็ตๆŸๆŽ›ๅกๅพŒ็™ปๅ‡บ๏ผŒ้€™ๆ„ๅ‘ณ่‘— ASF ไธๆœƒๅฐๆญคๅธณๆˆถ้€ฒ่กŒๅฎšๆœŸๆชขๆŸฅๆˆ–ไฝ”็”จใ€‚ ๆ‚จๆ‡‰่ฉฒ่‡ชๅทฑๆฑบๅฎšๆ˜ฏๅฆๆ›ดๅ–œๆญกASFๅœจๆ•ดๅ€‹ๆ™‚้–“ๅ…งไฝฟ็”จ็ตฆๅฎš็š„ๆฉŸๆขฐไบบๅฏฆไพ‹๏ผŒๆˆ–่€…ASFๆ˜ฏๅฆๆ‡‰่ฉฒๅœจๆŽ›ๅก้Ž็จ‹ๅฎŒๆˆๆ™‚ๅœๆญขๅฎƒใ€‚

This option makes the most sense to be combined with ShutdownIfPossible, so when all accounts are stopped, ASF will shutdown as well, putting your machine at rest and allowing you to schedule other actions, such as sleep or shutdown at the same moment of last card dropping.

SendOnFarmingFinished allows you to automatically send steam trade containing everything farmed up to this point to user with Master permission, which is very convenient if you don't want to bother with trades yourself. ๆญค้ธ้ …่ˆ‡lootๅ‘ฝไปค็š„ไฝœ็”จ็›ธๅŒ๏ผŒๅ› ๆญค่ซ‹่ฌน่จ˜๏ผŒ้ฆ–ๅ…ˆๆ‚จ้œ€่ฆๆœ‰ๆ•ˆ็š„SteamTradeToken๏ผŒ ไธฆไฝฟ็”จๅฏฆ้š›ๆœ‰่ณ‡ๆ ผ้€ฒ่กŒไบคๆ˜“็š„ๅธณๆˆถ๏ผŒไธ”ๅชๆœ‰MasterๆฌŠ้™้›†็š„็”จๆˆถๆ‰่ƒฝๅŸท่กŒใ€‚ ๆญค้ธ้ …่™•ๆ–ผๆดปๅ‹•็‹€ๆ…‹ๆ™‚๏ผŒASF้™คไบ†ๅœจๅฎŒๆˆๆŽ›ๅกๅพŒๅŸท่กŒlootไน‹ๅค–๏ผŒ้‚„๏ผˆ ็ธฝๆ˜ฏ๏ผ‰ๆœƒๅœจๆ”ถๅˆฐๆฏๅ€‹ๆ–ฐ็‰ฉๅ“้€š็Ÿฅ๏ผˆไธๆŽ›ๅกๆ™‚๏ผ‰ๆˆ–ๅฎŒๆˆๆฏๆฌกไบคๆ˜“ไน‹ๅพŒๅŸท่กŒlootใ€‚ ้€™ๅฐๆ–ผๅฐ‡ๅพžๅˆฅ่™•ๆ”ถๅˆฐ็š„็‰ฉๅ“ใ€Œ่ฝ‰็™ผใ€ๅˆฐๆˆ‘ๅ€‘็š„ๅธณๆˆถ็‰นๅˆฅๆœ‰็”จใ€‚ Typically you'll want to use ASF 2FA together with this feature, although it's not a requirement if you intend to handle 2FA confirmations manually in timely fashion.

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

SkipRefundableGames defines if ASF should skip games that are still refundable from automatic farming. ๆ‰€่ฌ‚ๅฏ้€€ๆฌพ็š„้Šๆˆฒ๏ผŒๆ˜ฏไฝ ๅœจ้ŽๅŽป2ๅ‘จๅ…ง้€š้Ž Steam ๅ•†ๅบ—่ณผ่ฒทไฝ†้Šๆˆฒๆ™‚้–“ไธ่ถ…้Ž2ๅฐๆ™‚็š„้Šๆˆฒ๏ผŒๅฆ‚ **Steam ้€€ๆฌพ**้ ้ขๆ‰€่ฟฐใ€‚ By default, ASF ignores Steam refunds policy entirely and farms everything, as most people would expect. However, you can use this flag 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.

SkipUnplayedGames defines if ASF should skip games that you didn't launch yet. Unplayed game in this context means that you have exactly no playtime recorded for it on Steam. If you use this flag, then such games will be skipped until Steam registers any playtime for them. This allows you to control better which games ASF is eligible to farm, skipping those that you didn't have a chance of trying out yet, keeping selected Steam features more useful - such as suggesting unplayed games to play.

EnableRiskyCardsDiscovery enables additional fallback which triggers when ASF is unable to load one or more of badge pages and is therefore unable to find games available for farming. In particular, some accounts with massive amount of card drops might cause a situation where loading badge pages is no longer possible (due to overhead), and those accounts are impossible for farming purely because we can't load the information based on which we can start the process. For those handful cases, this option allows alternative algorithm to be used, which uses a combination of boosters possible to craft and booster packs the account is eligible for, in order to find potentially available games to idle, then spending excessive amount of resources for verifying and fetching required information, and attempting to start the process of farming on limited amount of data and information in order to eventually reach a situation when badge page loads and we'll be able to use normal approach. Please note that when this fallback is used, ASF operates only with limited data, therefore it's completely normal for ASF to find much less drops than in reality - other drops will be found at later stage of farming process.

This option is called "risky" for a very good reason - it's extremely slow and requires significant amount of resources (including network requests) for operation, therefore it's not recommended to be enabled, and especially in long-term. You should use this option only if you previously determined that your account suffers from being unable to load badge pages and ASF can't operate on it, always failing to load necessary information to start the process. Even if we made our best to optimize the process as much as possible, it's still possible for this option to backfire, and it might cause unwanted outcomes, such as temporary and maybe even permanent bans from Steam side for sending too many requests and otherwise causing overhead on Steam servers. Therefore, we warn you in advance and we're offering this option with absolutely no guarantees, you're using it at your own risk.

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


GamesPlayedWhileIdle

้ ่จญๅ€ผ็‚บ็ฉบ็š„ ImmutableHashSet<uint> ้กžๅž‹ใ€‚ ๅฆ‚ๆžœ ASF ๆฒ’ๆœ‰ไปปไฝ•้Šๆˆฒๅฏไพ›ๆŽ›ๅก๏ผŒๅฎƒๅฏไปฅ้Š็ŽฉๆŒ‡ๅฎš็š„ Steam ้Šๆˆฒ (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. ๆญคๅŠŸ่ƒฝๅฏไปฅ่ˆ‡CustomGamePlayedWhileIdleๅŒๆ™‚ๅ•Ÿ็”จ๏ผŒไปฅไพฟๅœจSteam็ถฒ็ตกไธญ้กฏ็คบ่‡ช่จ‚้Šๆˆฒ็‹€ๆ…‹๏ผŒไฝ†ๅœจCustomGamePlayedWhileFarming้€™้กžๆƒ…ๆณไธญ๏ผŒ ๅฏฆ้š›็š„้กฏ็คบ้ †ๅบ็„กๆณ•ไฟ่ญ‰ใ€‚ ่ซ‹ๆณจๆ„๏ผŒSteam ๅ…่จฑ ASF ๆœ€ๅคšๅŒๆ™‚้Š็Žฉ 32 ๅ€‹ appIDs๏ผŒๅ› ๆญคๆ‚จ่จญ็ฝฎ่ฉฒๅฑฌๆ€งๆ™‚ๆ‡‰ๅƒ่€ƒๆญคๅ€ผใ€‚


HoursUntilCardDrops

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ3็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅธณๆˆถๆ˜ฏๅฆๆœ‰ๅก็‰‡ๆŽ‰่ฝ้™ๅˆถ๏ผŒ่‹ฅๆœ‰๏ผŒๅ‰‡ๅฎš็พฉๅˆๅง‹ๅฐๆ™‚ๆ•ธใ€‚ ๅ—้™ๅˆถ็š„ๅกๆŽ‰่ฝๆ„ๅ‘ณ่‘—ๅธณๆˆถๅœจ็ตฆๅฎš็š„้Šๆˆฒ็Žฉไบ†่‡ณๅฐ‘ hoursuntilcardsๅฐๆ™‚ๅ‰ไธๆœƒ็ฒๅพ—ไปปไฝ•ๆŽ‰่ฝ็š„ๅก็‰‡ใ€‚ ไธๅนธ็š„ๆ˜ฏ๏ผŒๆฒ’ๆœ‰็ฅžๅฅ‡็š„ๆ–นๆณ•ไพ†ๆชขๆธฌๅฎƒ๏ผŒๆ‰€ไปฅASFไพ่ณดๆ–ผไฝ ใ€‚ ๆญคๅฑฌๆ€งๅฝฑ้Ÿฟๅฐ‡ไฝฟ็”จ็š„**ๆŽ›ๅก็ฎ—ๆณ•**ใ€‚ ๆญฃ็ขบ่จญ็ฝฎๆญคๅฑฌๆ€งๅฐ‡ๆœ€ๅคง้™ๅบฆๅœฐๆ้ซ˜ๆ•ˆ็Ž‡๏ผŒไธฆๆœ€ๅคง้™ๅบฆๅœฐๆธ›ๅฐ‘ๆŽ›ๅกๆ‰€้œ€็š„ๆ™‚้–“ใ€‚ ่ซ‹่จ˜ไฝ๏ผŒๆ‚จๆ˜ฏๅฆๆ‡‰่ฉฒไฝฟ็”จไฝ•ๅ€ผ๏ผŒ้€™ๆฒ’ๆœ‰ๆ˜Ž้กฏ็š„็ญ”ๆกˆ๏ผŒๅ› ็‚บๅฎƒๅฎŒๅ…จๅ–ๆฑบๆ–ผๆ‚จ็š„ๅธณๆˆถใ€‚ ๅพžไพ†ๆฒ’ๆœ‰่ฆๆฑ‚้€€ๆฌพ็š„่€็”จๆˆถไผผไนŽๅœจๅก็‰‡ๆŽ‰่ฝไธŠไธๅ—้™ๅˆถ๏ผŒๆ‰€ไปฅไป–ๅ€‘ๆ‡‰่ฉฒไฝฟ็”จ0็š„ๅ€ผ๏ผŒ่€Œๆ–ฐๅธณๆˆถๅ’Œ้‚ฃไบ›่ฆๆฑ‚้€€ๆฌพ็š„ไบบๅœจๅก็‰‡ๆŽ‰่ฝไธŠๆœ‰3ๅฐๆ™‚็š„้™ๅˆถใ€‚ ็„ถ่€Œ๏ผŒ้€™ๅชๆ˜ฏ็†่ซ–๏ผŒไธๆ‡‰ไฝœ็‚บไธ€ๆขๅฎš็†ใ€‚ ๆญคๅฑฌๆ€ง็š„้ป˜่ชๅ€ผๆ˜ฏๅŸบๆ–ผโ€œๅ…ฉๅฎณ็›ธๆฌŠๅ–ๅ…ถ่ผ•โ€ๅ’Œๅคงๅคšๆ•ธ็”จไพ‹่จญ็ฝฎ็š„ใ€‚


LootableTypes

้ ่จญๅ€ผ็‚บ 1๏ผŒ3๏ผŒ5 ็š„ ImmutableHashSet<byte> ้กžๅž‹ใ€‚ 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 SteamGems ็”จๆ–ผ่ฃฝไฝœๆ“ดๅ……ๅŒ…็š„ Steam ๅฏถ็Ÿณ๏ผŒๅŒ…ๆ‹ฌๅฏถ็Ÿณ่ข‹
7 SaleItem Steam็‰น่ณฃๆœŸ้–“็ฒๅพ—็š„็‰นๆฎŠ็‰ฉๅ“
8 Consumable ไฝฟ็”จๅพŒๆถˆๅคฑ็š„็‰นๆฎŠๅฐ็Žฉๆ„ๅ…’
9 ๅ€‹ไบบๆช”ๆกˆไฟฎๆ”นๅ™จ ๅฏไปฅไฟฎๆ”นSteam่จญๅฎšๆช”ๅค–่ง€็š„็‰นๆฎŠ็‰ฉๅ“
10 Sticker Special items that can be used on Steam chat
11 ChatEffect Special items that can be used on Steam chat
12 MiniProfileBackground Special background for Steam profile
13 AvatarProfileFrame Special avatar frame for Steam profile
14 AnimatedAvatar Special animated avatar for Steam profile
15 KeyboardSkin Special keyboard skin for Steam deck
16 StartupVideo Special startup video for Steam deck

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

ASF ้ ่จญๅŸบๆ–ผๆฉŸๅ™จไบบ็š„ๆœ€ๅธธ่ฆ‹็”จๆณ•๏ผŒๅƒ…ๆ‹พๅ–ๆ“ดๅ……ๅŒ…ๅ’Œไบคๆ˜“ๅก็‰‡๏ผˆๅŒ…ๆ‹ฌ้–ƒไบฎๅก็‰‡๏ผ‰ใ€‚ ้€™่ฃๅฎš็พฉ็š„ๅฑฌๆ€งๅ…่จฑไฝ ไปฅไปปไฝ•ไปคไฝ ๆปฟๆ„็š„ๆ–นๅผๆ”น่ฎŠ้€™็จฎ่กŒ็‚บใ€‚ ่ซ‹่จ˜ไฝ๏ผŒไธŠ้ขๆœชๅฎš็พฉ็š„ๆ‰€ๆœ‰้กžๅž‹้ƒฝๅฐ‡้กฏ็คบ็‚บUnknown้กžๅž‹๏ผŒ้€™ๅœจValve็™ผๅธƒไธ€ไบ›ๆ–ฐ็š„Steam้ …็›ฎๆ™‚ๅฐค็‚บ้‡่ฆ๏ผŒ่ฉฒ้ …็›ฎๅฐ‡่ขซASFๆจ™่จ˜็‚บUnknown๏ผŒ็›ดๅˆฐๅฎƒ่ขซๆทปๅŠ ๅˆฐ้€™่ฃก๏ผˆๅœจๅฐ‡ไพ†็š„็‰ˆๆœฌไธญ๏ผ‰ใ€‚ ้€™ๅฐฑๆ˜ฏ็‚บไป€้บผไธ€่ˆฌไธๅปบ่ญฐๅœจLootableTypesไธญ้ธๆ“‡Unknown้กžๅž‹๏ผŒ้™ค้žๆ‚จ็Ÿฅ้“่‡ชๅทฑๅœจๅšไป€้บผ๏ผŒไธฆไธ”้‚„็žญ่งฃ่ฌไธ€Steam ็ถฒ็ตกๅดฉๆฝฐไธฆๅฐ‡ๆ‚จ็š„ๆ‰€ๆœ‰ๅ•†ๅ“ๆจ™่จ˜็‚บUnknown๏ผŒASFๆœƒๅœจไบคๆ˜“ๆๆกˆไธญ็™ผ้€ๆ‚จ็š„ๆ•ดๅ€‹ๅบซๅญ˜ใ€‚ My strong suggestion is to not include Unknown type in the LootableTypes, even if you expect to loot everything (else).


MatchableTypes

้ ่จญๅ€ผ็‚บ 5 ็š„ ImmutableHashSet<byte> ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๅœจๅ•Ÿ็”จTradingPreferencesไธญ็š„SteamTradeMatcher้ธ้ …ๆ™‚ๅ…่จฑๅŒน้…็š„Steam็‰ฉๅ“้กžๅž‹ใ€‚ ้กžๅž‹็š„ๅฎš็พฉๅฆ‚ไธ‹๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 Unknown ไธๅฑฌๆ–ผไปฅไธ‹ไปปไฝ•้กžๅž‹็š„้กžๅž‹
1 BoosterPack ๅŒ…ๅซ3ๅผตไพ†่‡ชๅŒไธ€้Šๆˆฒ็š„ๅก็‰‡็š„ๆ“ดๅ……ๅŒ…
2 Emoticon ๅœจSteam่Šๅคฉไธญไฝฟ็”จ็š„่กจๆƒ…็ฌฆ่™Ÿ
3 FoilTradingCard ้–ƒไบฎ้กžๅž‹็š„TradingCard
4 ProfileBackground ๅฏๅœจๆ‚จ็š„Steamๅ€‹ไบบ่ณ‡ๆ–™้ ไธญไฝฟ็”จ็š„่ƒŒๆ™ฏ
5 TradingCard Steamไบคๆ˜“ๅก็‰‡๏ผŒๅฏ็”จๆ–ผๅˆๆˆๅพฝ็ซ  (้ž้–ƒๅก๏ผ‰
6 SteamGems ็”จๆ–ผ่ฃฝไฝœๆ“ดๅ……ๅŒ…็š„ Steam ๅฏถ็Ÿณ๏ผŒๅŒ…ๆ‹ฌๅฏถ็Ÿณ่ข‹
7 SaleItem Steam็‰น่ณฃๆœŸ้–“็ฒๅพ—็š„็‰นๆฎŠ็‰ฉๅ“
8 Consumable ไฝฟ็”จๅพŒๆถˆๅคฑ็š„็‰นๆฎŠๅฐ็Žฉๆ„ๅ…’
9 ๅ€‹ไบบๆช”ๆกˆไฟฎๆ”นๅ™จ ๅฏไปฅไฟฎๆ”น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

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ด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ใ€‚


OnlinePreferences

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ๅฑฌๆ€งใ€‚ This property can enable some additional online features on the Steam platform, and is defined as below:

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 None No special online preferences, default
1 IsSteamDeck Present itself as Steam Deck

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎš่ฉฒๅฆ‚ไฝ•่จญ็ฝฎๆญคๅฑฌๆ€ง๏ผŒ่ซ‹ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผ0ใ€‚


OnlineStatus

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ1 ็š„ byte flags ้กžๅž‹ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆฉŸๆขฐไบบๅœจ็™ป้Œ„Steam็ถฒ็ตกๅพŒๅฐ‡้กฏ็คบ็š„Steam็คพๅ€็‹€ๆ…‹ใ€‚ ็•ถๅ‰ๆ‚จๅฏไปฅ้ธๆ“‡ไปฅไธ‹็‹€ๆ…‹ไน‹ไธ€๏ผš

ๅ€ผ ๅ็จฑ
0 ้›ข็ทš
1 ็ทšไธŠ
2 ๅฟ™็ขŒ
3 ้›ข้–‹
4 ๆ‰“็žŒ็ก
5 ๆœŸๅพ…ไบคๆ˜“
6 ๆœŸๅพ…็Žฉ้Šๆˆฒ
7 ้š่บซ

Offline ็‹€ๆ…‹ไธป่ฆ้ฉ็”จๆ–ผไธปๅธณ่™Ÿใ€‚ ๆญฃๅฆ‚ๆ‚จๆ‡‰่ฉฒ็Ÿฅ้“็š„๏ผŒๆŽ›ๅกๆ™‚ๅฏฆ้š›ไธŠ้กฏ็คบๆ‚จ็š„Steam็‹€ๆ…‹็‚บ "ๅœจ็Žฉ้Šๆˆฒ๏ผšXXX"๏ผŒ้€™ๅฏ่ƒฝๆœƒ่ชคๅฐŽๆ‚จ็š„ๆœ‹ๅ‹ไปฅ็‚บไฝ ๅœจ็Žฉ้Šๆˆฒ๏ผŒ่€Œๅฏฆ้š›ไธŠๆ‚จๅชๆ˜ฏๅœจๆŽ›ๅกใ€‚ Offline็‹€ๆ…‹่งฃๆฑบไบ†้€™ๅ€‹ๅ•้กŒ - ็•ถๆ‚จไฝฟ็”จASFๆŽ›ๅกๆ™‚๏ผŒๆ‚จ็š„ๅธณๆˆถๆฐธ้ ไธๆœƒ้กฏ็คบ็‚บโ€œ้Šๆˆฒไธญโ€ใ€‚ ้€™ๆ˜ฏๅฏ่ƒฝ็š„๏ผŒๅ› ็‚บASFไธๅฟ…็™ป้Œ„Steam็คพๅ€๏ผŒๅณๅฏๆญฃๅธธๅทฅไฝœ๏ผŒๅ› ๆญคๆˆ‘ๅ€‘ๅฏฆ้š›ไธŠๆญฃๅœจ็Žฉ้Šๆˆฒ๏ผŒ้€ฃๆŽฅๅˆฐSteam็ถฒ็ตก๏ผŒไฝ†ๆ นๆœฌๆฒ’ๆœ‰ๅฎฃๅธƒๆˆ‘ๅ€‘็š„ๅœจ็ทš็‹€ๆ…‹ใ€‚ ่ซ‹ๆณจๆ„๏ผŒ้›ข็ทš็‹€ๆ…‹ไธ‹็Žฉ็š„้Šๆˆฒไปๅฐ‡่จˆๅ…ฅๆ‚จ็š„้Šๆˆฒๆ™‚้–“๏ผŒไธฆๅœจๆ‚จ็š„ๅ€‹ไบบ่ณ‡ๆ–™ไธญ้กฏ็คบ็‚บโ€œๆœ€่ฟ‘็Žฉ็š„้Šๆˆฒโ€ใ€‚

้™คๆญคไน‹ๅค–๏ผŒๅฆ‚ๆžœๆ‚จๅธŒๆœ›ๅœจASF้‹่กŒๆ™‚ๆŽฅๆ”ถ้€š็Ÿฅๅ’Œๆœช่ฎ€ๆถˆๆฏ๏ผŒๅŒๆ™‚ไธๆ‰“้–‹Steamๅฎขๆˆถ็ซฏ๏ผŒๆญคๅŠŸ่ƒฝไนŸๅพˆ้‡่ฆใ€‚ ้€™ๆ˜ฏๅ› ็‚บASFๆœฌ่บซๅ……็•ถSteamๅฎขๆˆถ็ซฏ๏ผŒ็„ก่ซ–ASFๆ˜ฏๅฆ้ก˜ๆ„๏ผŒSteam้ƒฝๆœƒๅ‘ๅ…ถๅปฃๆ’ญๆ‰€ๆœ‰้€™ไบ›ๆถˆๆฏๅ’Œๅ…ถไป–ไบ‹ไปถใ€‚ ๅฆ‚ๆžœๆ‚จๅŒๆ™‚้‹่กŒASFๅ’Œๆ‚จ่‡ชๅทฑ็š„Steamๅฎขๆˆถ็ซฏ๏ผŒๅ‰‡้€™ไธๆ˜ฏๅ•้กŒ๏ผŒๅ› ็‚บๅ…ฉๅ€‹ๅฎขๆˆถ็ซฏ้ƒฝๆ”ถๅˆฐๅฎŒๅ…จ็›ธๅŒ็š„ไบ‹ไปถใ€‚ ไฝ†ๆ˜ฏ๏ผŒๅฆ‚ๆžœๅชๆœ‰ASFๆญฃๅœจ้‹่กŒ๏ผŒSteam็ถฒ็ตกๅฏ่ƒฝๆœƒๅฐ‡ๆŸไบ›ไบ‹ไปถๅ’Œๆถˆๆฏๆจ™่จ˜็‚บโ€œๅทฒ็™ผ้€โ€๏ผŒๅ„˜็ฎกๆ‚จ็š„ๅ‚ณ็ตฑSteamๅฎขๆˆถ็ซฏ็”ฑๆ–ผไธๅญ˜ๅœจ่€Œๆœชๆ”ถๅˆฐๅฎƒใ€‚ Offline ็‹€ๆ…‹ไนŸ่งฃๆฑบไบ†้€™ๅ€‹ๅ•้กŒ๏ผŒๅ› ็‚บๅœจ้€™็จฎๆƒ…ๆณไธ‹๏ผŒASFๅพžๆœช่ขซ่€ƒๆ…ฎๅƒ่ˆ‡ไปปไฝ•็คพๅ€ไบ‹ไปถ๏ผŒๅ› ๆญค็•ถๆ‚จ่ฟ”ๅ›žๆ™‚๏ผŒๆ‰€ๆœ‰ๆœช่ฎ€ๆถˆๆฏๅ’Œๅ…ถไป–ไบ‹ไปถๅฐ‡่ขซๆญฃ็ขบๆจ™่จ˜็‚บๆœช่ฎ€ใ€‚

้‡่ฆ็š„ๆ˜ฏ่ฆๆณจๆ„๏ผŒๅœจOfflineๆจกๅผไธ‹้‹่กŒ็š„ASFๅฐ‡ไธ่ƒฝไปฅๅธธ่ฆ็š„Steam่Šๅคฉๆ–นๅผๆŽฅๆ”ถๅ‘ฝไปค๏ผŒๅ› ็‚บ่ŠๅคฉไปฅๅŠๆ•ดๅ€‹็คพๅ€็š„ๅญ˜ๅœจๅฏฆ้š›ไธŠๆ˜ฏๅฎŒๅ…จ้›ข็ทš็š„ใ€‚ ่งฃๆฑบๆญคๅ•้กŒ็š„ๆ–นๆณ•ๆ˜ฏไฝฟ็”จ invisible ๆจกๅผ๏ผŒๅฎƒไปฅ้กžไผผ็š„ๆ–นๅผๅทฅไฝœ๏ผˆไธๅ…ฌ้–‹็‹€ๆ…‹๏ผ‰๏ผŒไฝ†ไฟๆŒๆŽฅๆ”ถๅ’Œๅ›žๆ‡‰่จŠๆฏ็š„่ƒฝๅŠ›๏ผˆๅ› ๆญคไนŸๅฏ้—œ้–‰้€š็Ÿฅๅ’Œๆœช่ฎ€ๆถˆๆฏ๏ผŒๅฆ‚ไธŠๆ–‡ๆ‰€่ฟฐ๏ผ‰ใ€‚ Invisibleๆจกๅผๅฐๆ‚จไธๅธŒๆœ›ๅ…ฌ้–‹๏ผˆ็‹€ๆ…‹ๆ–น้ข๏ผ‰ไฝ†ไป่ƒฝ็™ผ้€ๅ‘ฝไปค็š„ๅ‚™็”จๅธณๆˆถๆœ€ๆœ‰ๆ„็พฉใ€‚

ไฝ†ๆ˜ฏ๏ผŒInvisibleๆจกๅผๆœ‰ไธ€ๅ€‹ๅ•้กŒโ€”โ€”ๅฎƒไธ้ฉ็”จๆ–ผไธปๅธณๆˆถใ€‚ ้€™ๆ˜ฏๅ› ็‚บ็•ถๅ‰ๅœจ็ทš็š„ไปปไฝ• Steamๆœƒ่ฉฑ้ƒฝๅฐ‡ๅ…ฌ้–‹็‹€ๆ…‹๏ผŒๅณไฝฟASFไธฆ็„กๆญคๆ„ใ€‚ ้€™ๆ˜ฏ็•ถๅ‰ๅœจASF็ซฏ็„กๆณ•ไฟฎๅพฉ็š„Steam็ถฒ็ตก้™ๅˆถ/้Œฏ่ชค้€ ๆˆ็š„๏ผŒๅ› ๆญคๅฆ‚ๆžœๆ‚จๆƒณไฝฟ็”จInvisibleๆจกๅผ๏ผŒๆ‚จ้‚„้œ€่ฆ็ขบไฟ** ๆ‰€ๆœ‰**ๅŒไธ€ๅธณๆˆถ็š„ๅ…ถไป–ๆœƒ่ฉฑไนŸไฝฟ็”จInvisibleๆจกๅผใ€‚ ้€™็งๆƒ…ๆณ้ฉ็”จๆ–ผASF็‚บๅ”ฏไธ€ๆดปๅ‹•ๆœƒ่ฉฑ็š„ๅ‚™็”จๅธณๆˆถ๏ผŒไฝ†ๅœจไธปๅธณๆˆถไธŠ๏ผŒๆ‚จๅคงๆฆ‚ๆœƒๅธŒๆœ›ๅฐ‡Online็‹€ๆ…‹้กฏ็คบ็ตฆๆ‚จ็š„ๆœ‹ๅ‹๏ผŒๅƒ…้šฑ่—ASFๆดปๅ‹•๏ผŒๅœจ้€™็จฎๆƒ…ๆณไธ‹Invisibleๆจกๅผๅฐไฝ ไพ†่ชชๆฏซ็„กๅนซๅŠฉ๏ผˆๆˆ‘ๅ€‘ๅปบ่ญฐไฝฟ็”จOfflineๆจกๅผ๏ผ‰ใ€‚ ๅธŒๆœ›Valveๅฐ‡ๅœจๆœชไพ†่งฃๆฑบ้€™ๅ€‹้™ๅˆถ/้Œฏ่ชค๏ผŒไฝ†ๆˆ‘่ฆบๅพ—้€™ๆ˜ฏๆœ‰็”Ÿไน‹ๅนด็ณปๅˆ—โ€ฆโ€ฆ

ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎšๅฆ‚ไฝ•่จญ็ฝฎๆญคๅฑฌๆ€ง๏ผŒๅปบ่ญฐๅฐไธปๅธณๆˆถไฝฟ็”จ 0 (Offline)๏ผŒไธฆ็‚บๅ…ถไป–ๅธณๆˆถไฝฟ็”จ้ ่จญๅ€ผ 1 (Online)ใ€‚


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ใ€‚

If you decide to change PasswordFormat of a bot that has already logged in to Steam network at least once, it's possible that you'll get one-time decrypt error on the next bot's start - this is caused by the fact that PasswordFormat is also used in regards to automatic encryption/decryption of sensitive properties in Bot.db database file. You can safely ignore that error, as ASF will be able to recover from this situation on its own. If it's happening on constant basis though, e.g. each restart, it should be investigated.


RedeemingPreferences

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉASFๅœจๅ…Œๆ›cd-keysๆ™‚็š„่กŒ็‚บ๏ผŒๅฎš็พฉๅฆ‚ไธ‹๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 None ้ ่จญๅ€ผ๏ผŒ็„ก็‰นๆฎŠๆฟ€ๆดปๅๅฅฝ
1 Forwarding ๅฐ‡็„กๆณ•ๅ…Œๆ›็š„้‡‘้‘ฐ่ฝฌ็™ผ็ตฆๅ…ถไป–ๆฉŸๆขฐไบบ
2 Distributing ๅœจ่‡ชๅทฑๅ’Œๅ…ถไป–ๆฉŸๆขฐไบบไน‹้–“ๅˆ†้…ๆ‰€ๆœ‰ๅฏ†้‘ฐ
4 KeepMissingGames ่ฝ‰็™ผๆ™‚ไฟ็•™๏ผˆๅฏ่ƒฝ๏ผ‰็ผบๅฐ‘ๆธธๆˆฒ็š„ๅฏ†้‘ฐ๏ผŒไธๅŽปๆฟ€ๆดปๅฎƒ
8 AssumeWalletKeyOnBadActivationCode Assume that BadActivationCode keys are equal to CannotRedeemCodeFromClient, and therefore try to redeem them as wallet keys

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

Forwardingๅฐ‡ๅฐŽ่‡ด็•ถๆŸๆฉŸๆขฐไบบ๏ผˆๅฆ‚ๆžœๆชขๆŸฅๅˆฐๅ…ถ๏ผ‰็ผบๅฐ‘่ฉฒ็‰นๅฎš้Šๆˆฒๆ™‚๏ผŒๅฐ‡ๆญค็„กๆณ•ๅ…Œๆ›็š„ๅฏ†้‘ฐ่ฝ‰็™ผ็ตฆๅฆไธ€ๅ€‹้€ฃๆŽฅไธฆ็™ป้Œ„็š„ๆฉŸๆขฐไบบใ€‚ ๆœ€ๅธธ่ฆ‹็š„ๆƒ…ๆณๆ˜ฏๅฐ‡AlreadyPurchased็š„้Šๆˆฒ่ฝ‰็™ผ็ตฆๅฆไธ€ๅ€‹ๅฐšๆœชๆ“ๆœ‰่ฉฒ็‰นๅฎš้Šๆˆฒ็š„ๆฉŸๆขฐไบบ๏ผŒไฝ†ๆญค้ธ้ …้‚„ๆถต่“‹ๅ…ถไป–ๅ ดๆ™ฏ๏ผŒไพ‹ๅฆ‚DoesNotOwnRequiredApp๏ผˆๅฐšๆœชๆ“ๆœ‰้Šๆˆฒๆœฌ้ซ”๏ผ‰๏ผŒRateLimitedๆˆ–RestrictedCountry๏ผˆ้Šๆˆฒ้Ž–ๅ€๏ผ‰ใ€‚

Distributing ๅ‘ฝไปคๅฐ‡ๅฐŽ่‡ดๆฉŸๆขฐไบบๅœจ่‡ช่บซๅ’Œๅ…ถไป–ๆฉŸๆขฐไบบไน‹้–“ๅˆ†็™ผๆ‰€ๆœ‰ๆŽฅๆ”ถๅˆฐ็š„้‡‘้‘ฐใ€‚ ้€™ๆ„ๅ‘ณ่‘—ๆฏๅ€‹ๆฉŸๆขฐไบบ้ƒฝๆœƒๅพžๆ‰น่™•็†ไธญ็ฒๅพ—ไธ€ๅ€‹ๅฏ†้‘ฐใ€‚ ้€šๅธธ๏ผŒๅชๆœ‰็•ถๆ‚จ็‚บๅŒไธ€้Šๆˆฒๅ…Œๆ›ๅคšๅ€‹้‡‘้‘ฐๆ™‚๏ผŒๆ‰ๆœƒไฝฟ็”จๆญคๅŠŸ่ƒฝ๏ผŒไธฆไธ”ๆ‚จๅธŒๆœ›ๅฐ‡ๅฎƒๅ€‘ๅ‡ๅ‹ปๅœฐๅˆ†ไฝˆๅœจๆ‚จ็š„ๆฉŸๆขฐไบบไธญ๏ผŒ่€Œไธๆ˜ฏ็‚บๅ„็จฎไธๅŒ็š„้Šๆˆฒๅ…Œๆ›้‡‘้‘ฐใ€‚ ๅฆ‚ๆžœๆ‚จๅชๅ…Œๆ›ๅ–ฎๅ€‹ ๅ…Œๆ› ๆ“ไฝœไธญ็š„ไธ€ๅ€‹้‡‘้‘ฐ๏ผŒๅ‰‡ๆญคๅŠŸ่ƒฝๆฏซ็„กๆ„็พฉ๏ผˆๅ› ็‚บๆฒ’ๆœ‰่ฆๅˆ†็™ผ็š„้กๅค–้‡‘้‘ฐ๏ผ‰ใ€‚

็•ถๆˆ‘ๅ€‘็„กๆณ•็ขบๅฎš่ขซๅ…Œๆ›็š„ๅฏ†้‘ฐๆ˜ฏๅฆๅฏฆ้š›ไธŠ็”ฑๆˆ‘ๅ€‘็š„ๆฉŸๆขฐไบบๆ“ๆœ‰ๆ™‚๏ผŒKeepMissingGamesๅฐ‡ๅฐŽ่‡ดๆฉŸๆขฐไบบ่ทณ้ŽForwardingใ€‚ ้€™ๆ„ๅ‘ณ่‘—Forwardingๅฐ‡ๅƒ…ๆ‡‰็”จๆ–ผAlreadyPurchased้Šๆˆฒๅฏ†้‘ฐ๏ผŒ่€Œไธ่ฆ†่“‹ๅ…ถไป–ๆƒ…ๆณ๏ผŒไพ‹ๅฆ‚DoesNotOwnRequiredApp๏ผŒ RateLimitedๆˆ–RestrictedCountryใ€‚ ้€šๅธธ๏ผŒๆ‚จๅฏ่ƒฝๅธŒๆœ›ๅœจไธปๅธณๆˆถไธŠไฝฟ็”จๆญค้ธ้ …๏ผŒไปฅ็ขบไฟ็•ถๆ‚จ็š„ๆฉŸๆขฐไบบ็‹€ๆ…‹ๆšซๆ™‚็‚บRateLimitedๆ™‚๏ผŒไธๆœƒ้€ฒไธ€ๆญฅ่ฝ‰็™ผๅœจๅ…ถไธŠๅ…Œๆ›็š„ๅฏ†้‘ฐใ€‚ ๆญฃๅฆ‚ๆ‚จๅพžๆ่ฟฐไธญ็Œœๆธฌ็š„้‚ฃๆจฃ๏ผŒๅฆ‚ๆžœๆœชๅ•Ÿ็”จForwarding๏ผŒๅ‰‡ๆญคๅญ—ๆฎต็ต•็„กๆ•ˆๆžœใ€‚

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.

ๅŒๆ™‚ๅ•Ÿ็”จForwardingๅ’ŒDistributingๅฐ‡ๅœจ่ฝ‰็™ผๅŠŸ่ƒฝไน‹ไธŠๆทปๅŠ ๅˆ†็™ผๅŠŸ่ƒฝ๏ผŒ้€™ไฝฟๅพ—ASF้ฆ–ๅ…ˆๅ˜—่ฉฆๅœจๆ‰€ๆœ‰ๆฉŸๆขฐไบบไธŠๅ…Œๆ›ไธ€ๅ€‹ๅฏ†้‘ฐ๏ผˆ่ฝ‰็™ผ๏ผ‰๏ผŒ็„ถๅพŒๅ†่ฝ‰็งปๅˆฐไธ‹ไธ€ๅ€‹๏ผˆๅˆ†็™ผ๏ผ‰ใ€‚ ้€šๅธธ๏ผŒๆ‚จๅชๅธŒๆœ›ๅœจ้œ€่ฆForwardingๆ™‚ไฝฟ็”จๆญค้ธ้ …๏ผŒๅฎƒๆ”น่ฎŠไบ†ไฝฟ็”จๅฏ†้‘ฐ็š„ๆฉŸๅ™จไบบ็š„่กŒ็‚บ๏ผŒ่€Œไธๆ˜ฏๅง‹็ต‚ๆŒ‰้ †ๅบไฝฟ็”จๆฏๅ€‹ๅฏ†้‘ฐ๏ผˆ้€™ๅฐ‡ๆ˜ฏ Forwarding๏ผˆๅƒ…่ฝ‰็™ผ๏ผ‰๏ผ‰ใ€‚ ๅฆ‚ๆžœๆ‚จ็Ÿฅ้“ๅคงๅคšๆ•ธ็”š่‡ณๆ‰€ๆœ‰ๅฏ†้‘ฐ้ƒฝ็ถๅฎšๅˆฐๅŒไธ€ๅ€‹้Šๆˆฒ๏ผŒ้€™็จฎ่กŒ็‚บๆœƒๅพˆๆœ‰็”จ๏ผŒๅ› ็‚บๅœจ้€™็จฎๆƒ…ๆณไธ‹๏ผŒForwardingๆœƒ้ฆ–ๅ…ˆๅ˜—่ฉฆๅœจไธ€ๅ€‹ๆฉŸๆขฐไบบไธŠๅ…Œๆ›ๆ‰€ๆœ‰ๅฏ†้‘ฐ๏ผˆๅฆ‚ๆžœๆฏๅ€‹ๅฏ†้‘ฐ็”จๆ–ผไธๅŒ็š„้Šๆˆฒ๏ผ‰๏ผŒForwarding + Distributingๅฐ‡ๅœจไธ‹ไธ€ๅ€‹ๅฏ†้‘ฐไธŠๅˆ‡ๆ›ๆฉŸๆขฐไบบ๏ผŒๅฐ‡ๆ–ฐๅฏ†้‘ฐ็š„ๅ…Œๆ›ไปปๅ‹™โ€œๅˆ†็™ผโ€ๅˆฐๅฆไธ€ๅ€‹ๆฉŸๆขฐไบบไธŠ๏ผˆๅฆ‚ๆžœ้ตๆ˜ฏ้‡ๅฐๅŒไธ€ๅ€‹้Šๆˆฒ๏ผŒ้‚ฃ้บผ้€™ๆ˜ฏๆœ‰ๆ„็พฉ็š„๏ผŒๆฏๅ€‹ๅฏ†้‘ฐๅฐ‡่ทณ้Žไธ€ๆฌกๆฏซ็„กๆ„็พฉ็š„ๅ˜—่ฉฆ๏ผ‰ใ€‚

ๆ‰€ๆœ‰ๅ…Œๆ›ๆ–นๆกˆ็š„ๅฏฆ้š›้ †ๅบๆ˜ฏๆŒ‰ๆฉŸๆขฐไบบๅ็จฑๅญ—ๆฏ้ †ๅบๆŽ’ๅˆ—็š„๏ผŒไธๅŒ…ๆ‹ฌไธๅฏ็”จ็š„ๆฉŸๆขฐไบบ ๏ผˆๆœช้€ฃๆŽฅ๏ผŒๅœๆญขๆˆ–้กžไผผๆƒ…ๆณ๏ผ‰ใ€‚ ่ซ‹่จ˜ไฝ๏ผŒๆฏๅ€‹IPๅ’Œๆฏๅ€‹ๅธณๆˆถๅœจไธ€ๅฐๆ™‚ๅ†…ๅญ˜ๅœจๅ…Œๆ›ๆฌกๆ•ธ็š„้™ๅˆถ๏ผŒไธฆไธ”ๆฏๆฌกไปฅOK็ตๅฐพ็š„ๅ…Œๆ›ๅ˜—่ฉฆ้ƒฝๆœƒๅฐŽ่‡ดๅคฑๆ•—ใ€‚ ASFๅฐ‡็›กๆœ€ๅคงๅŠชๅŠ›ๆธ›ๅฐ‘AlreadyPurchasedๅคฑๆ•—็š„ๆฌกๆ•ธ๏ผŒไพ‹ๅฆ‚้€š้Žๅ˜—่ฉฆ้ฟๅ…ๅฐ‡ๅฏ†้‘ฐ่ฝ‰็™ผ็ตฆๅทฒ็ถ“ๆ“ๆœ‰่ฉฒ็‰นๅฎš้Šๆˆฒ็š„ๅฆไธ€ๅ€‹ๆฉŸๆขฐไบบ๏ผŒไฝ†็”ฑๆ–ผSteam่™•็†่จฑๅฏ่ญ‰็š„ๆ–นๅผ๏ผŒๅฎƒไธฆไธ็ธฝ่ƒฝไฟ่ญ‰ๅทฅไฝœใ€‚ ไฝฟ็”จๅ…Œๆ›ๆจ™่ชŒ๏ผˆไพ‹ๅฆ‚Forwardingๆˆ–Distributing๏ผ‰ๅฐ‡ๅง‹็ต‚ๅขžๅŠ ๆ‚จ่งธ็™ผRateLimited็š„ๅฏ่ƒฝๆ€งใ€‚

้‚„่ฆ่จ˜ไฝ๏ผŒๆ‚จไธ่ƒฝๅฐ‡้‡‘้‘ฐ่ฝ‰็™ผๆˆ–ๅˆ†็™ผ็ตฆๆ‚จ็„กๆฌŠ่จชๅ•็š„ๆฉŸๆขฐไบบใ€‚ ้€™ๆ‡‰่ฉฒๆ˜ฏ้กฏ่€Œๆ˜“่ฆ‹็š„๏ผŒไฝ†่ซ‹็ขบไฟๆ‚จ่‡ณๅฐ‘่ฆๅฐๅ…Œๆ›้Ž็จ‹ไธญๅŒ…ๅซๆ‰€ๆœ‰็š„ๆฉŸๅ™จไบบๆ“ๆœ‰Operator่จชๅ•ๆฌŠ้™๏ผŒไพ‹ๅฆ‚ๅฏไปฅๅŸท่กŒstatus ASF ** ๅ‘ฝไปค **ใ€‚


RemoteCommunication

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ3 ็š„ byte flags ๅฑฌๆ€งใ€‚ 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

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

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

Further explanation on this subject is available in remote communication section. ้™ค้žๆ‚จๆœ‰ๅ……ๅˆ†็š„ไฟฎๆ”น็†็”ฑ๏ผŒๅฆๅ‰‡ๆ‡‰ไฟๆŒๅฎƒ็‚บ้ ่จญๅ€ผใ€‚


SendTradePeriod

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ้กžๅž‹ใ€‚ This property works very similar to SendOnFarmingFinished preference in FarmingPreferences, with one difference - instead of sending trade when farming is done, we can also send it every SendTradePeriod hours, regardless of how much we have to farm left. ๅฆ‚ๆžœๆ‚จๆƒณ้šจๆ™‚ๅพžๆ‚จ็š„ๅฐ่™Ÿ่™• ๆ‹พๅ– ๆŽ›ๅกๆ‰€ๅพ—๏ผŒ่€Œไธๅฟ…็ญ‰ๅพ…ๅฎƒๅฎŒๆˆๆŽ›ๅก๏ผŒ้€™ๅฐ‡ๆœƒๅพˆๆœ‰ๅนซๅŠฉใ€‚ ้ ่จญๅ€ผ 0 ๅฐ‡็ฆ็”จๆญคๅŠŸ่ƒฝ๏ผŒๅฆ‚ๆžœๆ‚จๆƒณ่ฎ“ๆ‚จ็š„ๆฉŸๅ™จไบบๅ‘ๆ‚จ็™ผ้€ไบคๆ˜“๏ผŒไพ‹ๅฆ‚ๆฏๅคฉ๏ผŒๆ‚จๆ‡‰่ฉฒๅฐ‡ๆญคๅ€ผ่จญ็ฝฎ็‚บ24ใ€‚

Typically you'll want to use ASF 2FA together with this feature, although it's not a requirement if you intend to handle 2FA confirmations manually in timely fashion. ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎš่ฉฒๅฆ‚ไฝ•่จญ็ฝฎๆญคๅฑฌๆ€ง๏ผŒ่ซ‹ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผ0ใ€‚


SteamLogin

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆ‚จ็š„ 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

้ ่จญๅ€ผ ็‚บ0 ็š„ ulong ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆฉŸๆขฐไบบๆ‡‰่‡ชๅ‹•ๅŠ ๅ…ฅ็š„Steam็พค็ต„๏ผˆๅŒ…ๆ‹ฌๅ…ถ่Šๅคฉๅฎค๏ผ‰็š„steamIDใ€‚ ่‹ฅๆ˜ฏ่ฆ็ฒๅ–็พค็ต„SteamID๏ผŒๆ‚จๅฏไปฅๅฐŽ่ˆชๅˆฐๆ‚จ็š„็พค็ต„**้ ้ข**๏ผŒ็„ถๅพŒๅœจ้€ฃ็ตๆœซๅฐพๅŠ ไธŠ /memberslistxml?xml=1 ่ฎ“ๅฎƒ็œ‹ไธŠๅŽปๅƒ t้€™ๆจฃ. ็„ถๅพŒ๏ผŒๆ‚จๅฏไปฅๅพž <groupID64> ๆจ™็ฑค่™•็ฒๅ–ๆ‚จ็พค็ต„็š„ SteamIDใ€‚ ๅœจไธŠ้ข็š„ไพ‹ๅญไธญ๏ผŒๅฎƒๅฐ‡ๆ˜ฏ 103581414460998ใ€‚ ้™คไบ†ๅ˜—่ฉฆๅœจๅ•Ÿๅ‹•ๆ™‚ๅŠ ๅ…ฅ็ตฆๅฎš็š„็ต„๏ผŒๆฉŸๆขฐไบบ้‚„ๆœƒ่‡ชๅ‹•ๆŽฅๅ—่ฉฒ็ต„็š„็ต„้‚€่ซ‹๏ผŒ้€™ไฝฟๆ‚จๅฏไปฅๅœจๆ‚จ็š„็ต„ๅ•Ÿ็”จ็งไบบๆœƒๅ“ก่ณ‡ๆ ผๆ™‚ๆ‰‹ๅ‹•้‚€่ซ‹ๆ‚จ็š„ๆฉŸๆขฐไบบ ใ€‚ ๅฆ‚ๆžœๆ‚จๆฒ’ๆœ‰ๅฐˆ้–€็”จๆ–ผๆ‚จ็š„ๆฉŸๅ™จไบบ็š„ไปปไฝ•็พค็ต„๏ผŒๅ‰‡ๆ‡‰ไฟ็•™ๆญคๅฑฌๆ€ง้ ่จญๅ€ผ็‚บ 0ใ€‚


SteamParentalCode

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆ‚จ็š„ Steam ๅฎถๅบญ็›ฃ่ญท 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. ้ ่จญๅ€ผ null ๆ„ๅ‘ณ่‘—็„ก้œ€ Steam ๅฎถๅบญ็›ฃ่ญท PIN ็ขผๅณๅฏ่งฃ้Ž–ๆญคๅธณๆˆถ๏ผŒๅฆ‚ๆžœๆ‚จไธไฝฟ็”จSteam ๅฎถๅบญ็›ฃ่ญทๅŠŸ่ƒฝ๏ผŒ้€™ๅฏ่ƒฝๅฐฑๆ˜ฏๆ‚จๆƒณ่ฆ็š„ใ€‚

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

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉๆ‚จ็š„ 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

้ ่จญๅ€ผ็‚บ null ็š„ string ้กžๅž‹ใ€‚ ็•ถๆ‚จ็š„ๆฉŸๆขฐไบบๅœจๆ‚จ็š„ๅฅฝๅ‹ๅˆ—่กจไธญๆ™‚๏ผŒๆฉŸๆขฐไบบ็„ก้œ€ไปฃ็ขผๅณๅฏไปฅ็ซ‹ๅณๅ‘ๆ‚จ็™ผ้€ไบคๆ˜“๏ผŒๅ› ๆญคๆ‚จๅฏไปฅๅฐ‡ๆญคๅฑฌๆ€งไฟ็•™็‚บ้ ่จญๅ€ผ nullใ€‚ ไฝ†ๆ˜ฏ๏ผŒๅฆ‚ๆžœๆ‚จๆฑบๅฎšไธๅฐ‡ๆ‚จ็š„ๆฉŸๆขฐไบบๆ”พๅœจๆ‚จ็š„ๆœ‹ๅ‹ๅˆ—่กจไธญ๏ผŒ่€Œๆ‚จๅˆๆœŸๆœ›ๆญคๆฉŸๆขฐไบบๅ‘ๆ‚จ็™ผ้€ไบคๆ˜“๏ผŒ้‚ฃ้บผๆ‚จๅฐ‡้œ€่ฆ็”Ÿๆˆไธฆๅกซๅ……ไบคๆ˜“ไปฃ็ขผใ€‚ ๆ›ๅฅ่ฉฑ่ชช๏ผŒๆญคๅฑฌๆ€งๆ‡‰ๅกซๅ……ๆญค ๆฉŸๆขฐไบบๅฏฆไพ‹็š„SteamUserPermissionsไธญ่จญ็ฝฎ็š„MasterๆฌŠ้™็š„ๅธณๆˆถ็š„ไบคๆ˜“ไปฃ็ขผใ€‚

็‚บไบ†ๆ‰พๅˆฐๆ‚จ็š„ไปฃ็ขผ๏ผŒ่‹ฅไฝฟ็”จMasterๆฌŠ้™็”จๆˆถ็™ป้Œ„๏ผŒ่ซ‹ๅฐŽ่ˆช่‡ณ** ๆญค่™• **ไธฆๆŸฅ็œ‹ๆ‚จ็š„ไบคๆ˜“็ถฒๅ€ใ€‚ ๆˆ‘ๅ€‘่ฆๅฐ‹ๆ‰พ็š„ไปฃ็ขผๆ˜ฏไฝๆ–ผๆ‚จ็š„ไบคๆ˜“้€ฃ็ตไธญ &token= ้ƒจๅˆ†ไน‹ๅพŒ็š„ 8 ๅ€‹ๅญ—ๅ…ƒใ€‚ ๆ‚จๆ‡‰่ฉฒ่ค‡่ฃฝไธฆ็ฒ˜่ฒผ้€™ 8 ๅ€‹ๅญ—ๅ…ƒๆ–ผsteamtradetoken่™•ใ€‚ ไธฆไธๅŒ…ๅซๆ•ดๅ€‹ไบคๆ˜“้€ฃๆŽฅ๏ผŒไบฆ็„ก้œ€ &token= ้ƒจๅˆ†๏ผŒๅƒ…ๅƒ…้œ€่ฆไปฃ็ขผๆœฌ่บซ๏ผˆ8ๅ€‹ๅญ—ๅ…ƒ๏ผ‰ใ€‚


SteamUserPermissions

้ ่จญๅ€ผ็‚บ็ฉบ็š„ImmutableDictionary<ulong, byte> ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๆ˜ฏไธ€ๅ€‹ๅญ—ๅ…ธๅฑฌๆ€ง๏ผŒๅฎƒๅฐ‡็”ฑ64ไฝSteamIDๆจ™่ญ˜็š„็ตฆๅฎšSteam็”จๆˆถๆ˜ ๅฐ„ๅˆฐbyte็ทจ่™Ÿ๏ผŒ่ฉฒ็ทจ่™Ÿๅฎš็พฉๆญค็”จๆˆถๅœจASFๅฏฆไพ‹ไธญ็š„ๆฌŠ้™ใ€‚ ASFไธญ็•ถๅ‰ๅฏ็”จ็š„ๆฉŸๆขฐไบบๆฌŠ้™ๅฎš็พฉ็‚บ๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 None ็„ก็‰นๆฎŠๆฌŠ้™๏ผŒ้€™ไธป่ฆๆ˜ฏๅˆ†้…็ตฆSteamIDไธๅœจ่จญ็ฝฎไธญ็š„็”จๆˆถโ€”โ€”็„ก้œ€ๅฎš็พฉๅ…ทๆœ‰ๆญคๆฌŠ้™็š„ไปปไฝ•ไบบ
1 FamilySharing ๆไพ›่ฆชๅ‹ๅŒไบซ็”จๆˆถ็š„ๆœ€ไฝŽ่จชๅ•ๆฌŠ้™ใ€‚ ๅ†ไธ€ๆฌก๏ผŒ้€™ไธป่ฆๆ˜ฏไธ€ๅ€‹ๅƒ่€ƒๅ€ผ๏ผŒๅ› ็‚บASF่ƒฝๅค ่‡ชๅ‹•็™ผ็พๆˆ‘ๅ€‘ๅ…่จฑไฝฟ็”จๆˆ‘ๅ€‘็š„ๅบซ็š„็”จๆˆท็š„SteamID
2 Operator ๆไพ›ๅฐ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„ๅŸบๆœฌ่จชๅ•ๆฌŠ้™๏ผŒไธป่ฆๆ˜ฏๆทปๅŠ ่จฑๅฏ่ญ‰ๅ’Œๅ…Œๆ›ๅฏ†้‘ฐ
3 Master ๆไพ›ๅฐ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„ๅฎŒๅ…จ่จชๅ•ๆฌŠ้™

็ฐก่€Œ่จ€ไน‹๏ผŒๆญคๅฑฌๆ€งๅ…่จฑๆ‚จ่‡ช่จ‚็ตฆๅฎšไฝฟ็”จ่€…็š„่จฑๅฏๆฌŠใ€‚ ๆฌŠ้™ไธป่ฆ็”จๆ–ผ่จชๅ•ASF ** ๅ‘ฝไปค ๏ผŒไฝ†ไนŸ็”จๆ–ผๅ•Ÿ็”จ่จฑๅคšASFๅŠŸ่ƒฝ ๏ผŒๅฆ‚ๆŽฅๅ—ไบคๆ˜“ใ€‚ ไพ‹ๅฆ‚๏ผŒๆ‚จๅฏ่ƒฝๅธŒๆœ›ๅฐ‡่‡ชๅทฑ็š„ๅธณๆˆถ่จญ็ฝฎ็‚บMaster๏ผŒไธฆ็‚บๆ‚จ็š„2-3ไฝๆœ‹ๅ‹ๆไพ›Operator่จชๅ•ๆฌŠ้™๏ผŒไปฅไพฟไป–ๅ€‘ๅฏไปฅไฝฟ็”จASF่ผ•้ฌ†็‚บๆ‚จ็š„ๆฉŸๆขฐไบบๅ…Œๆ›ๅฏ†้‘ฐ๏ผŒ ไฝ†ๅปไธ่ƒฝ**ๅœๆญขๅฎƒใ€‚ ๅ› ๆญค๏ผŒๆ‚จๅฏไปฅ่ผ•้ฌ†ๅœฐๅฐ‡่จฑๅฏๆฌŠๅˆ†้…็ตฆ็ตฆๅฎš็š„็”จๆˆถ๏ผŒไธฆ่ฎ“ไป–ๅ€‘ๅœจๆ‚จๆŒ‡ๅฎš็š„็ฏ„ๅœๅ…งไฝฟ็”จๆ‚จ็š„ๆฉŸๆขฐไบบใ€‚

ๆˆ‘ๅ€‘ๅปบ่ญฐๆ‚จๅช่จญ็ฝฎไธ€ไฝ master ็”จๆˆถ๏ผŒ่‡ณๆ–ผๆฌŠ้™็‚บ Operators ๅŠไปฅไธ‹็š„็”จๆˆถ๏ผŒๆ‚จๅฏไปฅๅ„˜็ฎก่จญ็ฝฎๆ‚จๅธŒๆœ›็š„ไปปๆ„ๆ•ธ้‡ใ€‚ While it's technically possible to set multiple Masters and ASF will work correctly with them, for example by accepting all of their trades sent to the bot, ASF will use only one of them (with lowest steam ID) for every action that requires a single target, for example a loot request, so also properties like SendOnFarmingFinished preference in FarmingPreferences or SendTradePeriod. If you perfectly understand those limitations, especially the fact that loot request will always send items to the Master with lowest steam ID, regardless of the Master that actually executed the command, then you can define multiple users with Master permission here, but we still recommend a single master scheme.

ๅ€ผๅพ—ๆณจๆ„็š„ๆ˜ฏ๏ผŒ้‚„ๆœ‰ไธ€ๅ€‹้กๅค–็š„OwnerๆฌŠ้™๏ผŒๅฎƒ่ขซๅฎš็พฉๆ–ผSteamOwnerIDๅ…จๅŸŸ้…็ฝฎๅฑฌๆ€งใ€‚ ๆ‚จไธ่ƒฝ็‚บ้€™่ฃก็š„ไปปไฝ•ไบบๅˆ†้… Owner ่จฑๅฏๆฌŠ๏ผŒๅ› ็‚บ SteamUserPermissions ๅฑฌๆ€งๅƒ…ๅฎš็พฉ่ˆ‡ๆฉŸๆขฐไบบๅฏฆไพ‹็›ธ้—œ็š„่จฑๅฏๆฌŠ๏ผŒ่€Œไธๆ˜ฏๅฎš็พฉๆ•ดๅ€‹ ASF ้€ฒ็จ‹ใ€‚ ๅฐๆ–ผ่ˆ‡ๆฉŸๆขฐไบบ็›ธ้—œ็š„ไปปๅ‹™๏ผŒSteamOwnerID่ˆ‡Master็š„่™•็†ๆ–นๅผ็›ธๅŒ๏ผŒๅ› ๆญคไธ้œ€่ฆๅœจๆญค่™•ๅฎš็พฉSteamOwnerIDใ€‚


TradeCheckPeriod

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ60็š„byte้กžๅž‹ๅฑฌๆ€งใ€‚ 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

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ๅฑฌๆ€งใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉASFๅœจไบคๆ˜“ไธญ็š„่กŒ็‚บ๏ผŒๅฎš็พฉๅฆ‚ไธ‹๏ผš

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 ็„ก ้ ่จญๅ€ผ๏ผŒ็„ก็‰นๆฎŠไบคๆ˜“ๅๅฅฝ
1 AcceptDonations ๆŽฅๅ—ๅฐๆˆ‘ๅ€‘็„กไปปไฝ•ๆๅคฑ็š„ไบคๆ˜“
2 SteamTradeMatcher ่ขซๅ‹•ๅƒ่ˆ‡ **STM**ไบคๆ˜“ใ€‚ ่จชๅ• ไบคๆ˜“ ไบ†่งฃๆ›ดๅคš่ณ‡่จŠ
4 ๅŒน้…ๆ‰€ๆœ‰็‰ฉๅ“ ้œ€่ฆ่จญ็ฝฎ SteamTradeMatcher, ไธฆ่ˆ‡ๅ…ถๅŒๆ™‚ไฝฟ็”จ--้™คไบ†ๅฐๆˆ‘ๅ€‘ๆœ‰ๅˆฉ็š„ๅ’Œ็„กๆ็š„ไบคๆ˜“ๅค–, ้‚„ๆŽฅๅ—ไธๅˆฉไบคๆ˜“
8 DontAcceptBotTrades ไธ่‡ชๅ‹•ๆŽฅๅ—ไพ†่‡ชๅ…ถไป–ๆฉŸๆขฐไบบๅฏฆไพ‹็š„ loot ไบคๆ˜“
16 MatchActively ไธปๅ‹•ๅƒ่ˆ‡ **STM**ไบคๆ˜“ใ€‚ Visit ItemsMatcherPlugin for more info

Please notice that this property is flags field, therefore it's possible to choose any combination of available values. Check out json mapping if you'd like to learn more. ไธๅ•Ÿ็”จไปปไฝ•ๆจ™่ชŒๆœƒๅฐŽ่‡ดNone้ธ้ …ใ€‚

ๆœ‰้—œASFไบคๆ˜“้‚่ผฏ็š„้€ฒไธ€ๆญฅ่ชชๆ˜ŽไปฅๅŠๆฏๅ€‹ๅฏ็”จๆจ™่ชŒ็š„่ชชๆ˜Ž๏ผŒ่ซ‹่จชๅ•** ไบคๆ˜“ **้ƒจๅˆ†ใ€‚


TransferableTypes

้ ่จญๅ€ผ็‚บ 1๏ผŒ3๏ผŒ5 ็š„ ImmutableHashSet<byte> ้กžๅž‹ใ€‚ 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 SteamGems ็”จๆ–ผ่ฃฝไฝœๆ“ดๅ……ๅŒ…็š„ Steam ๅฏถ็Ÿณ๏ผŒๅŒ…ๆ‹ฌๅฏถ็Ÿณ่ข‹
7 SaleItem Steam็‰น่ณฃๆœŸ้–“็ฒๅพ—็š„็‰นๆฎŠ็‰ฉๅ“
8 Consumable ไฝฟ็”จๅพŒๆถˆๅคฑ็š„็‰นๆฎŠๅฐ็Žฉๆ„ๅ…’
9 ๅ€‹ไบบๆช”ๆกˆไฟฎๆ”นๅ™จ ๅฏไปฅไฟฎๆ”นSteam่จญๅฎšๆช”ๅค–่ง€็š„็‰นๆฎŠ็‰ฉๅ“
10 Sticker Special items that can be used on Steam chat
11 ChatEffect Special items that can be used on Steam chat
12 MiniProfileBackground Special background for Steam profile
13 AvatarProfileFrame Special avatar frame for Steam profile
14 AnimatedAvatar Special animated avatar for Steam profile
15 KeyboardSkin Special keyboard skin for Steam deck
16 StartupVideo Special startup video for Steam deck

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

ASF ้ ่จญๅŸบๆ–ผๆฉŸๅ™จไบบ็š„ๆœ€ๅธธ่ฆ‹็”จๆณ•๏ผŒๅƒ…ไบคๆ˜“ๆ“ดๅ……ๅŒ…ๅ’Œไบคๆ˜“ๅก็‰‡๏ผˆๅŒ…ๆ‹ฌ้–ƒไบฎๅก็‰‡๏ผ‰ใ€‚ ้€™่ฃๅฎš็พฉ็š„ๅฑฌๆ€งๅ…่จฑไฝ ไปฅไปปไฝ•ไปคไฝ ๆปฟๆ„็š„ๆ–นๅผๆ”น่ฎŠ้€™็จฎ่กŒ็‚บใ€‚ ่ซ‹่จ˜ไฝ๏ผŒไธŠ้ขๆœชๅฎš็พฉ็š„ๆ‰€ๆœ‰้กžๅž‹้ƒฝๅฐ‡้กฏ็คบ็‚บUnknown้กžๅž‹๏ผŒ้€™ๅœจValve็™ผๅธƒไธ€ไบ›ๆ–ฐ็š„Steam้ …็›ฎๆ™‚ๅฐค็‚บ้‡่ฆ๏ผŒ่ฉฒ้ …็›ฎๅฐ‡่ขซASFๆจ™่จ˜็‚บUnknown๏ผŒ็›ดๅˆฐๅฎƒ่ขซๆทปๅŠ ๅˆฐ้€™่ฃก๏ผˆๅœจๅฐ‡ไพ†็š„็‰ˆๆœฌไธญ๏ผ‰ใ€‚ ้€™ๅฐฑๆ˜ฏ็‚บไป€้บผไธ€่ˆฌไธๅปบ่ญฐๅœจTransferableTypesไธญ้ธๆ“‡Unknown้กžๅž‹๏ผŒ้™ค้žๆ‚จ็Ÿฅ้“่‡ชๅทฑๅœจๅšไป€้บผ๏ผŒไธฆไธ”้‚„็žญ่งฃ่ฌไธ€Steam ็ถฒ็ตกๅดฉๆฝฐไธฆๅฐ‡ๆ‚จ็š„ๆ‰€ๆœ‰ๅ•†ๅ“ๆจ™่จ˜็‚บUnknown๏ผŒASFๆœƒๅœจไบคๆ˜“ๆๆกˆไธญ็™ผ้€ๆ‚จ็š„ๆ•ดๅ€‹ๅบซๅญ˜ใ€‚ ๅœจๆญคๆˆ‘ๅผท็ƒˆๅปบ่ญฐไธ่ฆๅœจTransferableTypes ไธญ้ธๆ“‡ Unknown ้กžๅž‹๏ผŒๅณไฝฟๆ‚จ็œŸ็š„ๅธŒๆœ›ไบคๆ˜“ไปปไฝ•้กžๅž‹็š„็‰ฉๅ“ใ€‚


UseLoginKeys

้ ่จญๅ€ผ็‚บ true ็š„ bool ้กžๅž‹ใ€‚ ๆญคๅฑฌๆ€งๅฎš็พฉASFๆ˜ฏๅฆๆ‡‰ไฝฟ็”จๆญคSteamๅธณๆˆถ็š„็™ป้Œ„ๅฏ†้‘ฐๆฉŸๅˆถใ€‚ ็™ป้Œ„ๅฏ†้‘ฐๆฉŸๅˆถ่ˆ‡ๅฎ˜ๆ–นSteamๅฎขๆˆถ็ซฏ็š„โ€œ่จ˜ไฝๆˆ‘โ€้ธ้ …้žๅธธ็›ธไผผ๏ผŒ้€™ไฝฟๅพ—ASFๅฏไปฅๅญ˜ๅ„ฒๅ’Œไฝฟ็”จ่‡จๆ™‚ไธ€ๆฌกๆ€ง็™ป้Œ„ๅฏ†้‘ฐ้€ฒ่กŒไธ‹ไธ€ๆฌก็™ป้Œ„ๅ˜—่ฉฆ๏ผŒๅช่ฆๆˆ‘ๅ€‘็š„็™ป้Œ„ๅฏ†้‘ฐๆœ‰ๆ•ˆ๏ผŒ้€™ๅฐฑๅฏไปฅ้ฟๅ…ๆไพ›ๅฏ†็ขผใ€Steam Guard ๆˆ– 2FA ไปฃ็ขผ็š„้œ€ๆฑ‚ใ€‚ ็™ป้Œ„ๅฏ†้‘ฐๅญ˜ๅ„ฒๅœจBotName.dbๆ–‡ไปถไธญไธฆๆœƒ่‡ชๅ‹•ๆ›ดๆ–ฐใ€‚ ๅ› ๆญคๅœจไฝฟ็”จASFๆˆๅŠŸ็™ป้Œ„ไธ€ๆฌกๅพŒไธ้œ€่ฆๅ†ๆไพ›ๅฏ†็ขผ/ SteamGuard / 2FAไปฃ็ขผใ€‚

็‚บๆ–นไพฟ่ตท่ฆ‹๏ผŒ้ ่จญๆƒ…ๆณไธ‹ไฝฟ็”จๅทฒไฟๅญ˜็š„็™ป้Œ„ๅฏ†้‘ฐ๏ผŒๅ› ๆญคๆ‚จ็„ก้œ€ๅœจๆฏๆฌก็™ป้Œ„ๆ™‚่ผธๅ…ฅSteamPassword๏ผŒSteamGuardๆˆ–2FAไปฃ็ขผ๏ผˆๆœชๅ•“็”จ**ASF 2FA**็š„่ฉฑ๏ผ‰ใ€‚ ้€™ไนŸๆ˜ฏๅ„ช่ถŠ็š„ๆ›ฟไปฃๆ–นๆณ•๏ผŒๅ› ็‚บ็™ป้Œ„้‡‘้‘ฐๅช่ƒฝไฝฟ็”จไธ€ๆฌก๏ผŒๆ•…ๆ‚จ็š„ๅŽŸๅง‹ๅฏ†็ขผไธๆœƒไปฅไปปไฝ•ๆ–นๅผ้กฏ็คบใ€‚ ๅฎƒ่ˆ‡ๆ‚จ็š„Steamๅฎขๆˆถ็ซฏๅฎŒๅ…จ็›ธๅŒ็š„ๆ–นๆณ•๏ผŒๆœƒไฟๅญ˜ๆ‚จ็š„ๅธณๆˆถๅๅ’Œ็™ป้Œ„ๅฏ†้‘ฐไปฅ็”จๆ–ผไธ‹ๆฌก็™ป้Œ„ๅ˜—่ฉฆ๏ผŒ่ˆ‡ไฝฟ็”จUseLoginKeysๅ’ŒSteamLoginไธฆๅœจASFไธญๆธ…็ฉบSteamPassword็š„ๆ–นๅผๅˆฅ็„กไบŒ่‡ดใ€‚

ไฝ†ๆ˜ฏ๏ผŒๆœ‰ไบ›ไบบๅฏ่ƒฝๅœจๆ„้€™ๅ€‹็ดฐ็ฏ€๏ผŒๅ› ๆญคๅฆ‚ๆžœๆ‚จๆƒณ็ขบไฟASFไธๆœƒๅญ˜ๅ„ฒไปปไฝ•้กžๅž‹็š„ไปฃ็ขผไปฅๅ…่จฑๅ…ถๅœจ้—œ้–‰ๅพŒๆขๅพฉไธŠไธ€ๅ€‹ๆœƒ่ฉฑ๏ผŒ้€™่ฃกๅฏไปฅๅ•“็”จๆญค้ธ้ …๏ผŒ้€™ๅฐ‡ๅฐŽ่‡ดๆฏๆฌก็™ป้Œ„ๅ˜—่ฉฆ้ƒฝๅฟ…้ ˆ้€ฒ่กŒๅฎŒๅ…จ่บซไปฝ้ฉ—่ญ‰ใ€‚ ็ฆ็”จๆญค้ธ้ …็š„ๅทฅไฝœๅŽŸ็†่ˆ‡ๅœจๅฎ˜ๆ–น Steam ็”จๆˆถ็ซฏไธๅ‹พ้ธใ€Œ่จ˜ไฝๆˆ‘ใ€ๅฎŒๅ…จ็›ธๅŒใ€‚ ้™ค้žๆ‚จ็Ÿฅ้“่‡ชๅทฑๅœจๅšไป€้บผ๏ผŒๅฆๅ‰‡ๆ‡‰ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผ trueใ€‚


UserInterfaceMode

้€™ๆ˜ฏไธ€ๅ€‹้ ่จญๅ€ผ็‚บ0 ็š„ byte flags ้กžๅž‹ใ€‚ This property specifies user interface mode that the bot will be announced with after logging in to the Steam network. It might influence how the account is visible e.g. on the Steam chat, if your presence allows that through OnlineStatus. Currently you can choose one of below modes:

ๅ€ผ ๅ็จฑ ๆ่ฟฐ
0 VGUI Default Steam client mode
1 Tenfoot Big picture mode
2 Mobile Steam mobile app
3 Web Web browser session
4 ClientUI
5 MobileChat Steam mobile chat app
6 EmbeddedClient

Not all modes might have an effect. Also, you might be interested in checking OnlinePreferences, since some additional features are enabled there. ๅฆ‚ๆžœๆ‚จไธ็ขบๅฎš่ฉฒๅฆ‚ไฝ•่จญ็ฝฎๆญคๅฑฌๆ€ง๏ผŒ่ซ‹ๅฐ‡ๅ…ถไฟ็•™็‚บ้ ่จญๅ€ผ0ใ€‚


ๆช”ๆกˆ็ตๆง‹

ASF ไฝฟ็”จ็š„ๆช”็ตๆง‹็›ธ็•ถ็ฐกๅ–ฎใ€‚

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

็‚บไบ†ๅฐ‡ASF็งปๅ‹•ๅˆฐๆ–ฐไฝ็ฝฎ๏ผŒไพ‹ๅฆ‚ๅฆไธ€ๅฐPC๏ผŒๅช้œ€็งปๅ‹•/่ค‡่ฃฝconfig็›ฎ้Œ„ๅฐฑ่ถณๅค ไบ†๏ผŒ้€™ๆ˜ฏๅŸท่กŒไปปไฝ•ๅฝขๅผ็š„โ€œASFๅ‚™ไปฝโ€็š„ๆŽจ่–ฆๆ–นๅผ๏ผŒๅ› ็‚บๆ‚จๅง‹็ต‚ๅฏไปฅๅพžGitHubไธ‹่ผ‰ๅ‰ฉ้ค˜็š„๏ผˆ็จ‹ๅบ๏ผ‰้ƒจๅˆ†๏ผŒๅŒๆ™‚ไธๅญ˜ๅœจ็ ดๅฃžๅ…ง้ƒจASFๆช”ๆกˆ็š„้ขจ้šช๏ผŒไพ‹ๅฆ‚้Œฏ่ชคๅ‚™ไปฝใ€‚

logt 123. txt ๆช”ไฟๅญ˜ๆ‚จไธŠไธ€ๆฌก้‹่กŒ ASF ็”Ÿๆˆ็š„ๆ—ฅ่ชŒใ€‚ ๆญคๆช”ๆกˆไธๅŒ…ๅซไปปไฝ•ๆ•ๆ„Ÿไฟกๆฏ๏ผŒๅœจๆถ‰ๅŠๅ•้กŒใ€ๅดฉๆฝฐๆˆ–ๅƒ…ไฝœ็‚บไธŠๆฌก ASF ้‹่กŒไธญ็š„ไฟกๆฏๆ—ฅ่ชŒๆ™‚้žๅธธๆœ‰็”จใ€‚ ๅฆ‚ๆžœๆ‚จ้‡ๅˆฐๅ•้กŒๆˆ–้Œฏ่ชค๏ผŒๆˆ‘ๅ€‘ๆœƒ็ถ“ๅธธ่ฉขๅ•ๆญคๆช”ๆกˆใ€‚ ASFๆœƒ่‡ชๅ‹•็‚บๆ‚จ็ฎก็†ๆญคๆช”ๆกˆ๏ผŒไฝ†ๅฆ‚ๆžœๆ‚จๆ˜ฏ้€ฒๅ ฆ็”จๆˆถ๏ผŒๆ‚จๅฏไปฅ้€ฒไธ€ๆญฅ่ชฟๆ•ดASF ** ่จ˜้Œ„ **ๆจก็ต„ใ€‚

ASFๅŠๅ…ถๆ‰€ๆœ‰ๆฉŸๆขฐไบบ้…็ฝฎไฟๅญ˜ๆ–ผconfig็›ฎ้Œ„ไธญใ€‚

ASF.json ๆ˜ฏ ASF ๅ…จๅŸŸ้…็ฝฎๆช”ใ€‚ ๆญค้…็ฝฎ็”จๆ–ผๅฎš็พฉASFๅฆ‚ไฝ•ไฝœ็‚บ้€ฒ็จ‹้‹่กŒ๏ผŒ้€™ๆœƒๅฝฑ้Ÿฟ็จ‹ๅบๆœฌ่บซๅ’Œๆ‰€ๆœ‰ๆฉŸๆขฐไบบใ€‚ ๆ‚จๅฏไปฅๅœจ้‚ฃ่ฃกๆ‰พๅˆฐๅ…จๅŸŸๅฑฌๆ€ง๏ผŒไพ‹ๅฆ‚ASF้€ฒ็จ‹ๆ‰€ๆœ‰่€…๏ผŒ่‡ชๅ‹•ๆ›ดๆ–ฐๆˆ–่ชฟ่ฉฆใ€‚

BotName.jsonๆ˜ฏ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„้…็ฝฎใ€‚ ๆญค้…็ฝฎ็”จๆ–ผๆŒ‡ๅฎš็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„่กŒ็‚บๆ–นๅผ๏ผŒๅ› ๆญค้€™ไบ›่จญ็ฝฎๅƒ…้ฉ็”จๆ–ผ่ฉฒๆฉŸๆขฐไบบ๏ผŒ่€Œไธๆ˜ฏ่ˆ‡ๅ…ถไป–ๆฉŸๆขฐไบบๅ…ฑไบซใ€‚ ้€™ๅ…่จฑๆ‚จ้…็ฝฎๅ…ทๆœ‰ๅ„็จฎไธๅŒ่จญ็ฝฎ็š„ๆฉŸๆขฐไบบ๏ผŒ่€Œ็„ก้œ€่ฆๆฑ‚ๆ‰€ๆœ‰ๆฉŸๆขฐไบบ้ƒฝไปฅๅฎŒๅ…จ็›ธๅŒ็š„ๆ–นๅผๅทฅไฝœใ€‚ ๆฏๅ€‹ๆฉŸๅ™จไบบ้ƒฝ็”ฑๆ‚จๅœจBotNameไธญ้ธๆ“‡็š„ๅ”ฏไธ€ๆจ™่ญ˜็ฌฆๅ‘ฝๅใ€‚

้™คไบ†่จญๅฎšๆช”ๅค–๏ผŒASF้‚„ไฝฟ็”จ config ็›ฎ้Œ„ไพ†ๅญ˜ๅ„ฒๆ•ธๆ“šๅบซใ€‚

ASF.db ๆ˜ฏไธ€ๅ€‹ๅ…จๅŸŸASFๆ•ธๆ“šๅบซๆช”ใ€‚ ๅฎƒๅ……็•ถๅ…จๅŸŸๆŒไน…ๅญ˜ๅ„ฒ๏ผŒ็”จๆ–ผไฟๅญ˜่ˆ‡ ASF ้€ฒ็จ‹็›ธ้—œ็š„ๅ„็จฎไฟกๆฏ๏ผŒไพ‹ๅฆ‚ๆœฌๅœฐ Steam ไผบๆœๅ™จ็š„IPๅœฐๅ€ใ€‚ ๆ‚จไธๆ‡‰ๅฐๆญคๆช”้€ฒ่กŒไปปไฝ•ๆ”น่ฎŠใ€‚

BotName.dbๆ˜ฏ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„ๆ•ธๆ“šๅบซใ€‚ ๆญคๆช”็”จๆ–ผๅœจๆŒไน…ๅญ˜ๅ„ฒๆœ‰้—œ็ตฆๅฎšๆฉŸๆขฐไบบๅฏฆไพ‹็š„้—œ้ตๆ•ธๆ“š๏ผŒๅฆ‚็™ป้Œ„้‡‘้‘ฐๆˆ– ASF 2FA ไปฃ็ขผใ€‚ ๆ‚จไธๆ‡‰ๅฐๆญคๆช”้€ฒ่กŒไปปไฝ•ๆ”น่ฎŠใ€‚

BotName.keys ๆ˜ฏไธ€ๅ€‹็”จๆ–ผๅฐ‡ๅบ่™ŸๅฐŽๅ…ฅ **ๅพŒๅฐๅบ่™Ÿๅ•Ÿๅ‹•ๅ™จ**็š„็‰นๆฎŠๆช”ใ€‚ It's not mandatory and not generated, but recognized by ASF. ๆˆๅŠŸๅฐŽๅ…ฅ้‡‘้‘ฐๅพŒ๏ผŒๆญคๆช”ๅฐ‡่‡ชๅ‹•่ขซๅˆช้™คใ€‚

BotName.maFile ๆ˜ฏไธ€ๅ€‹็”จๆ–ผๅฐŽๅ…ฅ **ASF 2FA**็š„็‰นๆฎŠๆช”ใ€‚ It's not mandatory and not generated, but recognized by ASF if your BotName does not use ASF 2FA yet. ๆˆๅŠŸๅฐŽๅ…ฅ ASF 2FA ๅพŒ๏ผŒๆญคๆช”ๅฐ‡่‡ชๅ‹•่ขซๅˆช้™คใ€‚


JSON ๆ˜ ๅฐ„

ๆฏๅ€‹้…็ฝฎๅฑฌๆ€ง้ƒฝๆœ‰็›ธๆ‡‰็š„้กžๅž‹ใ€‚ ๅฑฌๆ€ง็š„้กžๅž‹ๅฎš็พฉไบ†ๆœ‰ๆ•ˆๅ€ผใ€‚ ๅช่ƒฝไฝฟ็”จๅฐ็ตฆๅฎš้กžๅž‹ๆœ‰ๆ•ˆ็š„ๅ€ผโ€”โ€”ๅฆ‚ๆžœไฝฟ็”จ็„กๆ•ˆๅ€ผ๏ผŒASF ๅฐ‡็„กๆณ•ๅˆ†ๆžๆ‚จ็š„้…็ฝฎใ€‚

ๆˆ‘ๅ€‘ๅผท็ƒˆๅปบ่ญฐๆ‚จไฝฟ็”จConfigGenerator็”Ÿๆˆ้…็ฝฎๆช” โ€”โ€”ๅฎƒๆœƒ็‚บๆ‚จ่™•็†ๅคงๅคšๆ•ธๅˆ็ดšๅ…งๅฎน๏ผˆไพ‹ๅฆ‚้กžๅž‹้ฉ—่ญ‰๏ผ‰๏ผŒๅ› ๆญคๆ‚จๅช้œ€่ฆ่ผธๅ…ฅๆญฃ็ขบ็š„ๅ€ผ๏ผŒ่€Œไธ้œ€่ฆไบ†่งฃไธ‹้ขๆŒ‡ๅฎš็š„่ฎŠ้‡้กžๅž‹ใ€‚ ๆœฌ็ฏ€ไธป่ฆ็”จๆ–ผๆ‰‹ๅ‹•็”Ÿๆˆ/็ทจ่ผฏ้…็ฝฎ็š„็”จๆˆถ๏ผŒไฝฟๅพ—ไป–ๅ€‘็Ÿฅ้“ๅฏไปฅไฝฟ็”จๅ“ชไบ›ๅ€ผใ€‚

ASF ไฝฟ็”จ็š„้กžๅž‹ๆ˜ฏๆœฌๆฉŸ C๏ผƒ้กžๅž‹๏ผŒๅฆ‚ไธ‹ๆ‰€็คบ๏ผš


boolโ€”โ€”ๅธƒๆž—้กžๅž‹๏ผŒๅƒ…ๆŽฅๅ— true ๅ’Œ false ๅ€ผใ€‚

็ฏ„ไพ‹๏ผš"Enabled": true


byteโ€”โ€”็„ก็ฌฆ่™Ÿๅญ—็ฏ€้กžๅž‹๏ผŒๅ–ๅ€ผ็ฏ„ๅœ็‚บๅพž0ๅˆฐ255๏ผˆๅŒ…ๆ‹ฌ๏ผ‰็š„ๆ•ดๆ•ธใ€‚

็ฏ„ไพ‹๏ผš"ConnectionTimeout": 90


ushortโ€”โ€”็„ก็ฌฆ่™Ÿ็Ÿญๆ•ดๆ•ธ้กžๅž‹๏ผŒๅ–ๅ€ผ็ฏ„ๅœ็‚บๅพž0ๅˆฐ65535๏ผˆๅŒ…ๆ‹ฌ๏ผ‰็š„ๆ•ดๆ•ธใ€‚

็ฏ„ไพ‹๏ผš"WebLimiterDelay": 300


uintโ€”โ€”็„ก็ฌฆ่™Ÿๆ•ดๆ•ธ้กžๅž‹๏ผŒๅ–ๅ€ผ็ฏ„ๅœ็‚บๅพž 0 ๅˆฐ 4294967295๏ผˆๅŒ…ๆ‹ฌ๏ผ‰็š„ๆ•ดๆ•ธใ€‚


ulongโ€”โ€”็„ก็ฌฆ่™Ÿ้•ทๆ•ดๆ•ธ้กžๅž‹๏ผŒๅƒ…ๆŽฅๅ—ๅพžๅ–ๅ€ผ็ฏ„ๅœ็‚บๅพž 0 ๅˆฐ 184674407791615 ๏ผˆๅŒ…ๆ‹ฌ๏ผ‰็š„ๆ•ดๆ•ธใ€‚

็ฏ„ไพ‹๏ผš"SteamMasterClanID": 103582791440160998


stringโ€”โ€”ๅญ—ไธฒ้กžๅž‹๏ผŒๆŽฅๅ—ไปปไฝ•ๅญ—ๅ…ƒๅบๅˆ—๏ผŒๅŒ…ๆ‹ฌ็ฉบๅ€ผ "" ๅ’Œ nullใ€‚ ASFๅฐ‡็ฉบๅบๅˆ—ๅ’Œnullๅ€ผ่ฆ–็‚บ็›ธๅŒ๏ผŒๅ› ๆญคๆ‚จๅฏไปฅๆ นๆ“š่‡ชๅทฑ็š„ๅ–œๅฅฝ้ธๆ“‡ไฝฟ็”จๅ“ชไธ€ๅ€‹๏ผˆๆˆ‘ๅ€‘ๆŽจ่–ฆไฝฟ็”จ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> - Immutable dictionary (map) that maps a unique key specified in its keyType, to value specified in its valueType. ๅœจJSONไธญ๏ผŒๅฎƒ่ขซๅฎš็พฉ็‚บๅ…ทๆœ‰้ตๅ€ผๅฐ็š„ๅฐ่ฑกใ€‚ ่ซ‹่จ˜ไฝ๏ผŒๅœจ้€™็จฎๆƒ…ๆณไธ‹ๅง‹็ต‚ๅผ•็”จkeyType๏ผŒๅณไฝฟๅฎƒๆ˜ฏไพ‹ๅฆ‚ulong็š„ๅ€ผ้กžๅž‹ใ€‚ There is also a strict requirement of the key being unique across the map, this time enforced by JSON as well.

ImmutableDictionary<ulong, byte>็š„็ฏ„ไพ‹๏ผš "SteamUserPermissions": { "76561198174813138": 3, "76561198174813137": 1 }


flagsโ€”โ€”Flagsๅฑฌๆ€ง้€š้Žๆ‡‰็”จๆŒ‰ไฝ้‹็ฎ—ๅฐ‡ๅนพๅ€‹ไธๅŒ็š„ๅฑฌๆ€ง็ต„ๅˆๆˆไธ€ๅ€‹ๆœ€็ต‚ๅ€ผใ€‚ ้€™ๅ…่จฑๆ‚จๅŒๆ™‚้ธๆ“‡ๅ„็จฎไธๅŒๅ…่จฑๅ€ผ็š„ไปปไฝ•ๅฏ่ƒฝ็ต„ๅˆใ€‚ ๆœ€็ต‚ๅ€ผ็‚บๆ‰€ๆœ‰ๅทฒๅ•Ÿ็”จ้ธ้ …็š„ๅ€ผ็š„็ธฝๅ’Œใ€‚

่ˆ‰ไพ‹ไพ†่ชช๏ผŒ็ตฆๅ‡บไปฅไธ‹็š„ๅ€ผ๏ผš

ๅ€ผ ๅ็จฑ
0 ็„ก
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๏ผ‰๏ผŒไปฅๅŠ< code> 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_็‚บๅ‰็ถด็š„ๅญ—็ฌฆไธฒ ใ€‚ ๆˆ‘ๅ€‘ๅธŒๆœ›้€™ๅ€‹JavaScript้™ๅˆถ่ƒฝๆœ€็ต‚่ขซ่งฃๆฑบใ€‚


้…็ฝฎๅ…ผๅฎนๆ€ง

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. Therefore, if new config property gets introduced in new version of ASF, all your configs will remain compatible with new version, and ASF will treat that new config property as it'd be defined with its default value. ๆ‚จๅฏไปฅ้šจๆ™‚ๆ นๆ“š้œ€่ฆๆทปๅŠ ๏ผŒๅˆช้™คๆˆ–็ทจ่ผฏ้…็ฝฎๅฑฌๆ€งใ€‚

We recommend to limit defined config properties only to those that you want to change, since this way you automatically inherit default values for all other ones, not only keeping your config clean but also increasing compatibility in case we decide to change a default value for property that you don't want to explicitly set yourself (e.g. WebLimiterDelay).

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


่‡ชๅ‹•้‡่ผ‰

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

  • ๅ‰ตๅปบ้…็ฝฎๆ™‚๏ผŒๆ–ฐๅขž๏ผˆไธฆๅœจ้œ€่ฆๆ™‚ๅ•Ÿๅ‹•๏ผ‰ๆ–ฐ็š„ๆฉŸๆขฐไบบๅฏฆไพ‹
  • ๅˆช้™คๅ…ถ้…็ฝฎๆ™‚ๅœๆญข๏ผˆๅฆ‚ๆžœ้œ€่ฆ๏ผ‰ไธฆๅˆช้™ค่ˆŠ็š„ๆฉŸๆขฐไบบๅฏฆไพ‹
  • ็ทจ่ผฏๅ…ถ้…็ฝฎๆ™‚๏ผŒๅœๆญข๏ผˆไธฆๅœจ้œ€่ฆๆ™‚ๅ•Ÿๅ‹•๏ผ‰ไปปไฝ•ๆฉŸๆขฐไบบๅฏฆไพ‹
  • ้‡ๅ‘ฝๅๆฉŸๆขฐไบบ็š„้…็ฝฎๆ™‚๏ผŒไปฅๆ–ฐๅ็จฑ้‡ๆ–ฐๅ•Ÿๅ‹•๏ผˆๅฆ‚ๆžœ้œ€่ฆ็š„่ฉฑ๏ผ‰่ฉฒๆฉŸๆขฐไบบ

ไปฅไธŠๆ‰€ๆœ‰ๅ…งๅฎน้ƒฝๆ˜ฏ้€ๆ˜Ž็š„๏ผŒ็„ก้œ€้‡ๆ–ฐๅ•Ÿๅ‹•็จ‹ๅบๆˆ–ๆฎบๆญปๅ…ถไป–๏ผˆๆœชๅ—ๅฝฑ้Ÿฟ็š„๏ผ‰ๆฉŸๆขฐไบบ็จ‹ๅบๅฏฆไพ‹ๅณๅฏ่‡ชๅ‹•ๅฎŒๆˆใ€‚

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

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

Clone this wiki locally