-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Configuration zh TW
本頁面專門用於說明ASF的設定。 這是一份關於config
資料夾的完整文件,使您能夠依照您的需求調整ASF。
ASF的設定分為兩個主要部分⸺全域(程序)設定與每個Bot的設定。 每個Bot都有自己一個名為BotName.json
的Bot設定檔(BotName
為Bot的名稱),而全域ASF(程序)設定是一個名為ASF.json
的檔案。
每個Bot都是一個在ASF程序中執行的獨立Steam帳號。 為了能夠正常運作,ASF需要定義至少一個Bot實例。 程序不會強制限制Bot實例的數量,所以您可以依據您的需求使用任意數量的Bot(Steam帳號)。
ASF使用JSON格式來儲存自身的設定檔。 這是個人性化、可讀性高且非常通用的格式,您可以在裡面設定程式。 不過不用擔心,您不需要為了設定ASF去專門了解JSON。 我提到它只是考慮到您可能會想要使用一些Bash腳本批次建立大量的ASF設定檔。
您可以經由幾種方式來完成設定。 您可以使用我們的設定檔生成器網頁工具,這是一個獨立於ASF的本機應用程式。 您也可以使用我們的IPC前端ASF-ui來直接設定ASF。 最後,您也隨時能夠依照下文指定的固定JSON結構,手動生成設定檔。 我們將簡明地解釋這些可用方式。
我們的設定檔生成器網頁工具的目標是提供您一個用於生成ASF設定檔的友善前端。 設定檔生成器也是基於用戶端的網頁工具,也就是說,您輸入的任何資訊都不會被上傳,而只會在本機中進行處理。 這保證了安全性與可靠性,因為如果您願意下載所有相關檔案,然後在您偏好的瀏覽器中打開index.html
,它甚至可以離線執行。
設定檔生成器網頁工具在Chrome與Firefox上經過驗證能夠正常執行,且它應該也能在所有支援JavaScript的主流瀏覽器中正常執行。
它的用法非常簡單:切換到適當的分頁來選擇要生成ASF
設定檔還是Bot
設定檔,確保所選設定檔的版本與您的ASF版本相符,然後輸入所有詳細資訊,並點擊「下載」按鈕。 最後將這個檔案移動到ASF的config
資料夾中,如果需要的話,覆蓋掉已經存在的檔案。 若要繼續設定,則重複以上操作,並參考本章節的其他部分來了解所有可設定的選項。
我們的ASF-ui IPC介面也允許您設定ASF,且這是在生成初始設定檔後修改設定的最佳方式,因為與設定檔生成器網頁工具總是生成新的檔案不同,這可以在原地直接編輯設定檔。
為了使用ASF-ui,您必須先啟用IPC介面自身。 IPC
預設為啟用,因此只要您沒有把它停用,就可以直接存取它。
在啟動程式後,直接前往ASF的IPC位址。 若一切運作正常,您可以在這裡修改ASF設定。
在一般情形下,我們強烈建議使用我們的設定檔生成器或ASF-ui,因為這樣更簡單,且能確保您不會不小心造成JSON結構錯誤。但如果您出於某些原因不想使用它們,那麼您也可以自行建立正確的設定檔。 參考以下的JSON範例,有個好的開始來了解正確的結構。您可以將內容複製到檔案中,並把它當作設定檔的基礎內容。 由於您沒有使用任何我們的前端,請確保您的設定檔是有效的,因為如果無法剖析,ASF會拒絕載入。 即使它屬於有效的JSON,您也必須確保所有屬性都有正確的型別,就像ASF所要求的。 關於所有可使用欄位正確的JSON結構,請參閱JSON映射及我們下方的文件。
全域設定位於ASF.json
檔案中,具有下列結構:
{
"AutoRestart": true,
"Blacklist": [],
"CommandPrefix": "!",
"ConfirmationsLimiterDelay": 10,
"ConnectionTimeout": 90,
"CurrentCulture": null,
"Debug": false,
"DefaultBot": null,
"FarmingDelay": 15,
"FilterBadBots": true,
"GiftsLimiterDelay": 1,
"Headless": false,
"IdleFarmingPeriod": 8,
"InventoryLimiterDelay": 4,
"IPC": true,
"IPCPassword": null,
"IPCPasswordFormat": 0,
"LicenseID": null,
"LoginLimiterDelay": 10,
"MaxFarmingTime": 10,
"MaxTradeHoldDuration": 15,
"MinFarmingDelayAfterBlock": 60,
"OptimizationMode": 0,
"SteamMessagePrefix": "/me ",
"SteamOwnerID": 0,
"SteamProtocols": 7,
"UpdateChannel": 1,
"UpdatePeriod": 24,
"WebLimiterDelay": 300,
"WebProxy": null,
"WebProxyPassword": null,
"WebProxyUsername": null
}
所有選項的解釋如下:
bool
型別,預設值為true
。 本屬性定義了是否允許ASF在需要時自行重新啟動。 有些事件會要求ASF自行重新啟動,例如ASF更新(經由UpdatePeriod
或update
指令來達成),編輯ASF.json
設定檔、restart
指令或類似事件。 通常重新啟動包含兩個部分⸺建立新的程序及結束當前程序。 大多數使用者對此應該沒有問題,且應維持本屬性為預設值true
,但是⸺若您正在透過自己的腳本並/或經由dotnet
執行ASF,您可能會想完全控制程序並避免某些情形,例如有新(重新啟動)的ASF程序在背景沉靜執行,而不是在腳本前景與舊的ASF程序一起退出。 考慮到新的程序將不再是您原有程序的直接子程序,這一點特別重要,因為這可能會使您無法為其使用標準控制台輸入。
如果有這樣的情形,那麼本屬性就是為您所準備的,您可以把它設定成false
。 但是,請注意,在這種情形下您需要負責自行重新啟動程序。 這在某種程度上很重要,因為ASF將只會退出,而不會生成新程序(例如在更新後)。因此,若您沒有加入任何邏輯,它將會停止運作直到您再次啟動它。 ASF總是會以正確的錯誤碼退出,指示出成功(零)或不成功(非零)。這樣您就能在腳本中加入正確的邏輯,以避免在故障時自動重新啟動,或至少製作一份本機副本log.txt
來提供進一步分析。 也請注意,不論如何設定本屬性,restart
指令總是會重新啟動ASF,因為此屬性只用於定義預設行為,而restart
指令總能重新啟動程序。 除非您有停用此功能的理由,否則您應維持啟用它。
ImmutableHashSet<uint>
型別,預設值為空。 顧名思義,本全域設定屬性定義了ASF自動掛卡程序要完全忽略的AppID(遊戲)。 但不幸的是,Steam喜歡將夏季/冬季特賣徽章標記成「可掉落的交換卡片」,這誤導了ASF程序,相信這是一個能掛卡的有效遊戲。 若沒有任何形式的黑名單,ASF最終會「掛」在掛卡一個實際上並非遊戲的遊戲上,並無限等待不存在的卡片掉落。 ASF黑名單的目的是將這些徽章標記成無法掛卡,因此我們可以在掛卡時直接忽略它們,而不是落入Bug陷阱。
ASF包含兩個預設的黑名單:SalesBlacklist
硬編碼於ASF的程式碼中,且無法編輯;一般的Blacklist
則是在本處定義。 SalesBlacklist
與ASF版本一同更新,且通常會包含在發布時已知的所有「不良」AppID,因此如果您使用最新版的ASF,就不需要自行管理這裡定義的Blacklist
。 本屬性的主要目的是允許您將ASF發布時未知的新AppID加入黑名單,它們不應被掛卡。 硬編碼的SalesBlacklist
都會在第一時間更新,因此如果您使用最新版的ASF,就不需要自行更新您的Blacklist
;但如果沒有Blacklist
,您就被迫強制更新ASF以在Valve釋出新的特賣徽章時能「正常執行」⸺我並不想強制您使用最新版的ASF程式碼,因此假如您因為某些原因,或無法在新的ASF中更新硬編碼的SalesBlacklist
,但您又想要讓舊的ASF維持運作,本屬性允許您自行「修復」ASF。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
若您正尋找基於Bot的黑名單,請查看fb
、fbadd
及fbrm
指令。
string
型別,預設值為!
。 本屬性指定用於ASF指令區分大小寫的前綴。 也就是說,這是您要在每個ASF指令前加上這個,ASF才會聽從您的指令。 您也可以將此值設定成null
或留空,來讓ASF不使用前綴,在這種情形下,您可以直接輸入帶有一般識別碼的指令。 但是,這樣做會降低ASF的效能,因為ASF經過最佳化,如果訊息不是以CommandPrefix
開頭,就不會進一步剖析它⸺若您決定不使用前綴,ASF將會被迫讀取並回應所有訊息,即使它們並不是ASF指令。 因此,若您不喜歡預設值!
,仍建議繼續使用CommandPrefix
,如/
。 為了保持一致,CommandPrefix
會影響整個ASF程序。 除非您有理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為10
。 ASF會確保在兩次連續的雙重驗證確認提取請求間至少間隔ConfirmationsLimiterDelay
秒,以避免觸發速率限制⸺這被使用在ASF雙重驗證上,例如2faok
指令,以及在一些與交易相關的操作上面。 預設值是依據我們的測試結果所訂定,如果您不想遇到問題,請勿減少此值。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為90
。 本屬性定義了ASF執行各種網路操作的逾時時間,以秒為單位。 特別是,ConnectionTimeout
定義了HTTP及IPC請求的逾時秒數,ConnectionTimeout / 10
定義了心跳機制的最大失敗次數,而ConnectionTimeout / 30
定義了我們允許初始Steam網路連線請求的分鐘數。 對於大多數人來說,預設值90
應該是適合的,但是如果您的網路連線或PC速度較慢,您可能會希望增加此值(像是120
)。 請注意,即使是更大的值也無法神奇地修復緩慢或甚至是無法存取的Steam伺服器,所以我們不應該無限等待不會發生的事情,而是稍後再試。 將此值設定過高會導致在抓取網路問題時出現過多延遲,並降低整體效能。 將此值設定過低會降低整體的穩定性及效能,因為ASF會在尚在剖析時中止有效的請求。 因此,在一般情形下,將此值設定成比預設還要低並沒有任何優點,因為Steam伺服器常常會變得異常緩慢,且可能會需要更多時間來剖析ASF請求。 預設值是相信我們的網路連線穩定,及懷疑Steam網路能在逾時前處理我們的請求之間的平衡。 若您想盡快發現問題,並使ASF更快重新連線/做出回應,預設值就足夠(或稍微低於,像是60
,使ASF不用等那麼久)。 與之相反,若您發現ASF遇到了網路問題,例如請求失敗、遺失心跳包或與Steam連線中斷,如果您確定這並非由您的網路所引起的,而是Steam自身,則增加此值就具意義,因為增加逾時時間可以讓ASF有更多「耐心」,來不會決定要立刻重新連線。
可能需要增加此屬性的一個範例情形是讓ASF處理極大量的交易提案,Steam可能需要2分鐘以上才能完全接受並處理這些提案。 透過增加預設的逾時時間,ASF會更有耐心並等待更長時間,然後才會決定不完成交易並放棄初始請求。
另一種情形可能是設備或網路連線非常緩慢,需要更多的時間來處理正在傳輸的資料。 這是個非常罕見的情形,因為CPU/網路頻寬基本上不會是個瓶頸,但仍是個值得一提的可能性。
簡而言之,在大多數情形下預設值是適合的,但如果需要,您可能會想要增加它。 不過遠高於預設值也沒有任何意義,因為更多的逾時時間也無法神奇地修復無法存取的Steam伺服器。 除非您有理由編輯此屬性,否則您應維持它為預設值。
string
型別,預設值為null
。 預設情形下,ASF會嘗試使用您的作業系統語言,且如果可以,會優先使用該語言的翻譯字串。 這要感謝我們的社群,他們致力於將ASF在地化成各類主流語言。 若出於某種原因,您不想使用您的作業系統原生語言,您可以使用此設定屬性來選擇任意一種您想使用的有效語言。 如需所有可以使用的語言,請造訪MSDN來查詢語言編碼
。 值得一提的是,ASF接受包含特定國家或地區的編碼,例如"en-GB"
,也接受通用編碼,例如"en"
。 指定當前語系還可能會影響與地區相關的行為,例如貨幣/日期格式等。 請注意,若您選擇非本機原生語言,您可能會需要額外的字型/語言套件才能正確顯示特定語言的字元。 通常在您偏好以英文而非您的母語使用ASF時,會需要使用這個設定屬性。
bool
型別,預設值為false
。 本屬性定義了程序是否以除錯模式執行。 在除錯模式中,ASF會在config
旁建立一個特殊的debug
資料夾,用於追蹤ASF與Steam伺服器間的所有通訊。 除錯資訊有助於發現與網路及一般ASF工作流程相關的棘手問題。 除此之外,某些程式常式會更加詳細,例如WebBrowser
會說明某些請求失敗的確切原因⸺這些條目會被寫入至一般的ASF紀錄日誌中。 除非開發人員要求,否則您不應在除錯模式下執行ASF。 以除錯模式執行ASF會降低效能、減少穩定性,且會生成過量除錯訊息,因此只應在需要時短暫使用,用於除錯特定問題、重現錯誤或獲得關於失敗請求的更多資訊,但不應用於日常的程式執行階段。 您將會看到非常大量的新錯誤、問題及異常狀況⸺若您決定自行分析這些資訊,請確保您對ASF、Steam及其特點有著充分的了解,因為並不是所有資訊皆與問題相關。
警告:啟用本模式會在紀錄日誌中記錄可能敏感的資訊,例如您登入至Steam的帳號及密碼(因網路日誌所記錄)。 這些資料會同時寫入至debug
資料夾及標準的log.txt
(現在是故意詳細記錄本資訊)中。 您不應在任何公開位置張貼ASF生成的除錯內容,且ASF開發人員總是會提醒您應經由電子郵件或其他安全位置傳送它。 我們不會儲存或利用這些敏感資訊,它們只是做為除錯常式的一部份而寫入,因為它們或許會與您遇到的問題有關。 我們希望您不以任何方式修改ASF紀錄日誌,但如果您擔心,您還是依然能適當編輯這些敏感資訊。
您可以使用取代的方式替換掉敏感資訊,例如使用星號。 但您需要避免完全刪除包含敏感資訊的資訊行,因為它們可能與問題有關,應予以保留。
string
型別,預設值為null
。 在某些情境下,ASF會需要有「預設Bot」的使用,來處理事件⸺舉例來說,在您未指定目標Bot時的IPC指令或互動式控制台。 本屬性使您能夠選擇預設Bot來處理這些情境下,請將BotName
填入這裡。 若設定的Bot不存在,或您使用了預設值null
,ASF將會依字母順序選擇第一個登錄的Bot。 若您想要在IPC或互動式控制台指令中省略[Bots]
引數,且總是預設選擇同一個Bot,您就需要設定本設定屬性。
byte
型別,預設值為15
。 ASF會在正常運作時每隔FarmingDelay
分鐘檢查一次當前掛卡的遊戲是否已掉落所有卡片。 將此屬性設定過低可能會傳送過多的Steam請求,而設定過高可能會使ASF在掛卡完成後仍「掛著」指定遊戲,直到最多滿FarmingDelay
分鐘。 預設值應該對於大多數使用者來說是適合的,但如果您有很多個Bot在執行,則可以考慮增加至例如30
分鐘,以限制傳送的Steam請求。 值得一提的是,ASF使用基於事件的機制,並在每個Steam物品掉落時檢查遊戲的徽章頁面,所以在一般情形下,我們甚至能不必每隔固定時間去檢查,但由於我們並不完全信任Steam網路⸺如果我們無法在FarmingDelay
分鐘內未能檢查卡片是否掉落,我們仍會去檢查遊戲的徽章頁面。 假設Steam網路運作正常,降低此值不會以任何方式提高掛卡效率,而且還會顯著增加網路負擔⸺建議維持預設值15
分鐘,並只在需要時才增加它。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
bool
型別,預設值為true
。 本屬性定義了ASF是否會自動拒絕已知被標示成惡劣行為者的交易提案。 為此,ASF會依據需要與我們的伺服器通訊,以提取Steam ID黑名單清單。 列出的那些Bot,是我們歸類為對ASF有害的人所操作的,例如那些違反我們的行為準則、使用我們提供的功能及資源例如PublicListing
來濫用或利用他人,或是從事直接犯罪行為例如對伺服器發動DDoS攻擊的人。 因為ASF對於使用者之間的整體公平、誠信及合作方面有堅定的立場,以使得整體社群蓬勃發展,因此預設情形下此屬性為啟用,ASF會篩選掉歸類為對我們提供的服務有害的Bot。 除非您有充分的理由編輯此屬性,例如不同意我們的聲明,並故意允許這些Bot進行操作(包含利用您的帳號),否則您應維持它為預設值。
byte
型別,預設值為1
。 在兩個連續的贈禮/序號/授權處理(兌換)請求間,ASF會確保至少間隔GiftsLimiterDelay
秒,以避免觸發速率限制。 除此之外,這也用於遊戲清單請求的全域限制器,例如由owns
指令所發出的請求。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
bool
型別,預設值為false
。 本屬性定義了程序是否以無頭模式執行。 在無頭模式中,ASF會假定它在伺服器或其他非互動式環境下執行,因此它不會嘗試在控制台輸入中讀取任何資訊。 這包含了隨選詳細資料(帳號憑證,例如雙重驗證代碼、Steam Guard代碼、密碼,或ASF操作所需的其他任何變數),及其他所有控制台輸入(例如互動式指令控制台)。 也就是說,Headless
模式等同於將ASF控制台變成唯讀。 本設定主要給在伺服器上執行ASF的使用者使用,在需要使用者輸入(例如雙重驗證代碼)時,ASF將會直接停止使用該帳號以中止輸入操作。 除非您在伺服器上執行ASF,且您先前已確認ASF能夠在非無頭模式中執行,否則您應維持停用它。 在無頭模式下,任何使用者互動行為皆會被拒絕,如果您的帳號在啟動過程中需要任何控制台輸入,則帳號不會啟動。 這對伺服器來說非常有用,因為ASF可以在要求提供憑證時嘗試中止帳號登入,而不是(無限)等待使用者提供這些憑證。 啟用此模式也會允許您能夠使用input
指令,來作為標準控制台輸入的替代方式。 若您不確定如何設定本屬性,請保留預設值false
。
若您在伺服器上執行ASF,您可能會需要將本選項與--process-required
命令列引數一起配合使用。
byte
型別,預設值為8
。 當ASF沒有東西掛卡時,它會每隔IdleFarmingPeriod
小時檢查帳號內是否擁有新遊戲可供掛卡。 在我們獲得新遊戲時,並不需要此功能,因為ASF足夠智慧,可以在這種情形中自動檢查徽章頁面。 IdleFarmingPeriod
主要是針對我們在帳號中已有的遊戲新加入了交換卡片功能的情形。 在這種情形下不會產生事件,因此如果我們要知道這件事,ASF就必須定期檢查徽章頁面。 將值設定成0
時會停用本功能。 並請查看:FarmingPreferences
中的ShutdownOnFarmingFinished
偏好設定。
byte
型別,預設值為4
。 ASF會確保在兩次連續的物品庫請求間至少間隔InventoryLimiterDelay
秒,以避免觸發速率限制⸺這被使用在提取Steam物品庫時,特別是在您自己的指令中,例如loot
或transfer
。 預設值4
是依據連續提取超過100個Bot實例的物品庫所設定的,應該能滿足大部分(可能不是全部)的使用者需求。 但是,如果您的Bot數量很少,您可能會想要減少它,或甚至把它更改成0
,使ASF忽略延時並加快獲得Steam物品庫。 但請注意,設定過低的值將會導致Steam暫時封鎖您的IP,並完全阻止您提取您的物品庫。 若您執行了很多需要大量物品庫請求的Bot,您可能還會需要增加此值,但在這種情形下,您可能更應該去限制這些請求的數量。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
bool
型別,預設值為true
。 本屬性定義了ASF的IPC伺服器是否與主程序一同啟動。 IPC允許行程間通訊,包含透過啟動本機HTTP伺服器使用ASF-ui。 若您不打算使用任何ASF的第三方IPC整合工具,包含我們的ASF-ui的話,您就可以安全地停用這個選項。 否則,最好保持啟用狀態(預設狀態)。
string
型別,預設值為null
。 本屬性定義了每個經由IPC執行的API呼叫的強制性密碼,作為一項額外的安全措施。 當設定成非空值時,所有的IPC請求都會需要額外的password
屬性,為此處指定的密碼。 預設值null
將會跳過要求密碼,並使ASF接受所有請求。 除此之外,啟用此選項也會啟用內建的IPC反暴力破解機制,一個IPAddress
在非常短的時間內傳送過多未授權的請求時,將會被暫時封鎖。 除非您有理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為0
。 本屬性定義了IPCPassword
屬性的格式,使用EHashingMethod
作為基本類型。 若需了解更多資訊,請參閱安全性章節,因為您需要確保IPCPassword
屬性確實包含符合IPCPasswordFormat
的密碼。 也就是說,在您更改IPCPasswordFormat
的時候,您的IPCPassword
就必須已經是您所選的格式了,而不是在更改完成後才是。 除非您知道您在做什麼,否則請保留預設值0
。
Guid?
型別,預設值為null
。 本屬性允許我們的贊助者使用付費的選擇性功能來增強ASF的運作能力。 在目前,這允許您使用ItemsMatcher
外掛程式中的MatchActively
功能。
雖然我們建議您使用GitHub,因為它提供了每月續訂及一次性的階級,並能完全自動化使您享有立即解鎖權限的功能,我們也支援所有其他可供使用的贊助管道。 閱讀這則貼文來了解如何透過其他方式贊助,並手動獲得相應時長的授權。
不論使用何種方式,只要您是ASF贊助者,您就能在這裡獲得您的授權碼。 您會需要以GitHub登入來確認您的身分,我們只會請求您的公開唯讀資訊,也就是您的使用者名稱。 LicenseID
由32個十六進制字元組成,例如f6a0529813f74d119982eb4fe43a9a24
。
請確保您沒有與其他人共用您的LicenseID
。 因為它是給個人使用的,如果洩漏出去就有可能被撤銷。 如果不幸您意外洩漏了授權碼,您可以在相同地方生成一個新的。
除非您想要啟用ASF的額外功能,否則您沒有必要在此提供授權碼。
byte
型別,預設值為10
。 在兩個連續的連線嘗試間,ASF會確保至少間隔LoginLimiterDelay
秒,以避免觸發速率限制。 預設值10
是依據超過100個Bot實例的連線所設定的,應該能滿足大部分(可能不是全部)的使用者需求。 但是,如果您的Bot數量很少,您可能會想要增加/減少它,或甚至把更改成0
,使ASF忽略延時並加快連線至Steam。 但請注意,在有很多Bot的情形下將會導致Steam暫時封鎖您的IP,觸發InvalidPassword/RateLimitExceeded
錯誤,並完全阻止您登入⸺不只是在ASF,也包含您的Steam用戶端那邊。 同理,如果您執行大量Bot,特別是在同一IP位址內一起使用其他Steam用戶端/工具,您可能還會需要增加此值,以將登入請求分散至更長的時間段。
另外說明一下,此值還會用於所有ASF計畫任務的附載平衡緩衝,例如在SendTradePeriod
中的交易。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為10
。 如您所知,Steam並不總是能正常運作,有時候會發生奇怪的狀況,例如雖然我們正在遊玩,但沒有到紀錄我們的遊玩時數上。 ASF允許一個遊戲在單一遊戲模式下最多掛卡MaxFarmingTime
小時,並在此之後認為該遊戲已完成掛卡。 這是為了在發生怪異情形時不會使掛卡程序卡住所必需的,也可能Steam因為某種原因釋出了一個新的徽章,而使ASF卡住掛卡進度(參見:Blacklist
)。 預設值10
小時應該足以使一個遊戲掉落全部的交換卡片。 將此屬性設定過低可能會使ASF跳過有效的遊戲(是的,有些遊戲甚至需要長達9小時卡片才能全部掉完),設定過高則可能會導致掛卡程序卡住過久。 請注意,本屬性只會影響單次掛卡期間的單一遊戲(在完成整個佇列後,ASF將會重新計時),此外,此屬性並非依據遊玩時數,而是ASF內部的掛卡時數,因此ASF也會在重新啟動後重新計時。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
MaxTradeHoldDuration(交易託管最大期間) 本屬性定義了我們願意接受的交易託管最大天數⸺ASF會拒絕保留超過MaxTradeHoldDuration
天的交易,如交易章節所述。 此選項只會作用於在TradingPreferences
中啟用了SteamTradeMatcher
的Bot,而不會影響來自Master
/SteamOwnerID
的交易,也不影響贈禮。 對每個人來說,交易託管是非常惱人的,沒有人想被它打擾。 ASF應在自由的原則下幫助每個人使用,不論是否有交易託管⸺這就是為什麼本選項的預設值為15
。 但是,如果您想要拒絕所有具交易託管的交易,您可以在此處設定成0
。 請注意以下說明:有時間限制的交換卡片不受此選項影響,且ASF會自動拒絕具有交易託管的交易,如交易章節所述,所以沒有必要只因為這個原因而拒絕所有人。 除非您有理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為60
。 本屬性定義了以秒為單位的最小時間,如果ASF先前因為LoggedInElsewhere
而失去連線,則在等待這段時間後才會再次恢復掛卡:如果您決定以執行遊戲來強制使當前掛卡的ASF斷線,就會產生這種情形。 這種延遲存在的原因主要是為了方便並節省負擔,例如它使您能夠重新啟動遊戲,不必因為那一兩秒鐘的空檔,去跟ASF爭奪帳號的使用權。 由於重新獲得連線階段會使LoggedInElsewhere
失去連線,ASF就必須執行整個重新連線的流程,這會使設備及Steam網路增加額外的壓力,因此能夠的話,避免掉所有不必要的斷線。 預設情形下,本屬性設定成60
秒,這應該足以讓您輕鬆重新啟動遊戲了。 但是,在某些情境中您可能會希望增加此值,例如您的網路經常失去連線,且ASF會太快接管,這會導致您被迫自行重新連線。 此屬性的最大允許值為255
,這應該足以應付所有常見情境。 除了上述情形外,您也可以減少甚至設定成0
來完全取消本延遲,但因上述原因,我們通常不建議這樣做。 除非您有理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為0
。 本屬性定義了ASF在執行期間偏好的最佳化模式。 目前,ASF支援兩種模式:0
為MaxPerformance
;1
為MinMemoryUsage
。 預設情形下,ASF會盡可能地平行(並行)執行越多的工作,以跨CPU核心、多個CPU執行緒、多個網路插座及多個執行緒集區工作來增強效能。 舉例來說,ASF會在檢查需要掛卡的時查詢您的第一頁徽章頁面,在請求完成後,ASF會從中讀取您實際的徽章頁數,然後同時向所有剩餘頁面傳送請求。 這基本上就是您所想要的,因為在大多數情形下負擔是最小的,即使在單個CPU核心和非常有限功率的老舊硬體上,也能看到ASF異步程式碼的好處。 但是,由於許多工作是平行處理的,因此ASF需要在執行期間負責維護它們,例如維持網路插座開啟、執行緒處於活動狀態及工作有被處理,這可能會導致記憶體使用量不時增加。若您的可用記憶體嚴重受限,您可能會想要切換本屬性為1
(MinMemoryUsage
)來強制ASF處理盡可能少的工作,並盡量以同步方式執行可平行處理的異步程式碼。 只有在您已詳閱低記憶體設定後,且決定想要犧牲大量效能以獲得節省極少量的記憶體負擔時,才應考慮開啟此屬性。 通常本選項比您能夠使用的其他方式達成的成效還來得差得多,例如經由限制您的ASF使用,或調整執行環境的垃圾收集器,如低記憶體設定所述。 因此,如果您無法經由其他(更好的)方式獲得滿意的結果,則應將MinMemoryUsage
作為重新編譯執行環境前的最後手段。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
string
型別,預設值為"/me "
。 本屬性定義了加入至ASF送出的所有Steam訊息最開頭的前綴。 預設情形下,ASF使用"/me "
為前綴,使Steam聊天以不同顏色顯示Bot訊息,以便更容易區分它們。 另一個值得提及的前綴是"/pre "
,它有相似的結果,但有著不同的格式。 您也可以將本屬性設定成空值或null
來完全停用前綴,並以傳統的方式輸出所有ASF訊息。 值得一提的是,本屬性只會影響Steam訊息⸺以其他通道(例如IPC)回傳的回應不會受到影響。 除非您想要自訂標準的ASF行為,否則最好保留預設值。
ulong
型別,預設值為0
。 本屬性定義了ASF程序擁有者的64位元Steam ID,與指定Bot實例的Master
權限非常相似(但作用於全域)。 基本上您會想要將本屬性設定成您自己的Steam主帳號的ID。 Master
權限包含對該Bot實例的完全控制,但是全域指令例如exit
、restart
或update
則只能由SteamOwnerID
使用。 這很方便,因為您可能想要為您的朋友執行Bot,但同時不允許他們控制ASF程序,例如使用exit
指令退出程序。 預設值0
代表ASF程序沒有擁有者,這代表沒有人能使用全域ASF指令。 請注意,本屬性只適用於Steam聊天。 即使未設定本屬性,您仍可在IPC及互動式控制台中執行Owner
權限的指令。
byte flags
型別,預設值為7
。 本屬性定義了ASF在連線Steam伺服器時使用的Steam網際網路協定,其定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 無協定 |
1 | TCP | 傳輸控制協定 |
2 | UDP | 使用者資料報協定 |
4 | WebSocket | WebSocket |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項,且該選項本身無效。
預設情形下,ASF會使用所有可以使用的Steam協定,作為應對當機期間及其他相似的Steam問題的措施。 若您想要限制ASF只使用一兩種指定的協定,您需要修改本屬性。 例如若您在防火牆中啟用只啟用了TCP的流量,且您不希望ASF嘗試透過UDP連線,就可能會需要這樣的措施。 但是,除非您在除錯特定問題,否則您基本上會希望確保ASF能夠自由使用當前支援的所有協定,而不是只有一兩個。 除非您有充分的理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為1
。 本屬性定義了ASF使用的更新通道,用於自動更新(如果UpdatePeriod
大於0
時),或更新通知(UpdatePeriod
為0
時)。 目前ASF支援三個更新通道:0
為None
;1
為Stable
;而2
為Experimental
。 Stable
通道是預設的發布通道,這適合大多數的使用者。 Experimental
除了Stable
版本以外,也包含了專門提供進階使用者及其他開發人員測試新功能、確認錯誤修復或提供相關增強計畫回饋的預覽版本。 實驗性版本通常包含了尚未修補的錯誤、未完成或重寫的功能。 若您並非進階使用者,請保留預設值1
(Stable
)更新通道。 Experimental
通道是專門提供給知道如何回報錯誤、處理問題並給予回饋的使用者所使用⸺我們不會提供任何技術支援。 若您想深入了解更多資訊,請參閱發布週期。 若您想完全停用所有版本檢查,您也可以將UpdateChannel
設定成0
(None
)。 將UpdateChannel
設定成0
會完全停用與更新相關的功能,包含update
指令。 強烈反對您使用None
通道,因為這會使您自己面臨各種問題(在下文UpdatePeriod
的說明中有提到)。
除非您知道您在做什麼,否則我們強烈建議維持它為預設值。
ushort
型別,預設值為300
。 本屬性定義了ASF每隔多久會檢查一次自動更新。 更新是非常重要的,不僅能獲得新功能及重要安全補丁,也能修復錯誤、獲得效能增加及提高穩定性等。 當設定的值大於0
時,ASF會在有新版本可供使用的時候自動下載、取代並重新啟動自身(如果AutoRestart
允許)。 為了達到上述功能,ASF會每UpdatePeriod
小時檢查一次我們的GitHub儲存庫上是否有新版本可供使用。 值為0
會停用自動更新,但您仍能夠手動執行update
指令。 您可能還會對UpdatePeriod
需要設定的正確的UpdateChannel
感興趣。
ASF的更新過程涉及到更新整個ASF所使用的資料夾結構,但不會動到位於config
資料夾中您自己的設定檔或資料庫⸺這代表在ASF資料夾中的所有無關檔案都會在更新過程中遺失。 預設值24
能在不必要的檢查與維持ASF足夠新之間取得不錯的平衡。
除非您有充分的理由停用此屬性,否則您應維持使用合理的UpdatePeriod
來啟用自動更新,這是為了你好。 這不只是因為我們只支援最新的穩定版ASF,也因為我們只對最新版本提供安全保證。 若您使用過時的ASF版本,您就是故意讓您自己暴露於各種問題下,從小型錯誤、損壞的功能,到Steam帳號永久停權,所以我們強烈建議,為了你好,請始終確保您的ASF版本是最新的。 自動更新使我們能夠對任何問題快速反應,在造成後果之前能停用或修補有問題的程式碼⸺若您選擇停用,您會失去我們所有的安全保證,並需承擔執行可能的有害程式碼的風險後果,不只是對Steam網路,也包含您自己的Steam帳號。
ushort
型別,預設值為300
。 本屬性定義了向同一個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。 該值在大多數情形下皆為正確值,您應只增加它(而不能減少)。 簡而言之,由單一IP傳送至單個Steam網域的請求總量每300
毫秒不應大於1個請求。
除非您有理由編輯此屬性,否則您應維持它為預設值。
string
型別,預設值為null
。 本屬性定義了網頁代理位址,用於ASF的HttpClient
傳送的所有HTTP及HTTPS請求,特別是例如github.com
、steamcommunity.com
及store.steampowered.com
服務。 在一般情形下,代理ASF請求並沒有好處,但它對於繞過各式各樣的防火牆來說特別有用,特別是中國的長城防火牆。
本屬性定義為URI本文:
URI字串由協定名稱(支援:http/https/socks4/socks4a/socks5)、主機名稱及選擇性的連接埠所組成。 一個完整URI字串的範例是
"http://contoso.com:8080"
。
若您的代理需要使用者身分驗證,您還需要設定WebProxyUsername
與/或WebProxyPassword
。 若不需要,則僅設定本屬性即可。
目前ASF只對HTTP
及HTTPS
請求使用網際網路代理,不包含在ASF內部Steam用戶端完成的內部Steam網路通訊。 目前並無支援該功能的計畫,其主要原因是缺少了SK2功能。 若您需要/希望支援此功能,我建議可以先從此處了解。
除非您有理由編輯此屬性,否則您應維持它為預設值。
string
型別,預設值為null
。 本屬性定義了要提供代理功能的目標WebProxy
設備支援的Basic、Digest、NTLM或Kerberos身分驗證所使用的密碼欄位。 若您的代理不需要使用者憑證,您就不需要再此處輸入任何內容。 本選項只有在使用了WebProxy
的情形下才有用處,否則它沒有任何效果。
除非您有理由編輯此屬性,否則您應維持它為預設值。
string
型別,預設值為null
。 本屬性定義了要提供代理功能的目標WebProxy
設備支援的Basic、Digest、NTLM或Kerberos身分驗證所使用的使用者名稱欄位。 若您的代理不需要使用者憑證,您就不需要再此處輸入任何內容。 本選項只有在使用了WebProxy
的情形下才有用處,否則它沒有任何效果。
除非您有理由編輯此屬性,否則您應維持它為預設值。
如您所已知的,每個Bot都有自己的設定檔,使用基於下列範例的JSON結構: 首先您需要決定您的Bot的名稱(例如1.json
、main.json
、primary.json
或AnythingElse.json
),然後再開始設定。
注意:Bot無法被命名為ASF
(因為該關鍵字保留為全域設定),ASF也會忽略所有以點為開頭的設定檔。
Bot設定檔具有以下結構:
{
"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,
"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
}
所有選項的解釋如下:
bool
型別,預設值為false
。 啟用時,ASF會自動接受並兌換所有發送給Bot的Steam禮物(包含錢包禮物卡)。 這也包含了不在SteamUserPermissions
中定義的使用者所發送的禮物。 請注意,發送到電子郵件的禮物不會直接轉發給用戶端,所以ASF無法在沒有您幫助的情形下接受這些禮物。
本選項建議只在小號上使用,因為您很有可能不希望在主要帳號上自動兌換所有發送過來的禮物。 若您不確定您是否想要啟用本功能,請保留預設值false
。
byte flags
型別,預設值為0
。 本屬性定義了在各種事件中ASF的自動化行為,定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 無特殊Bot行為,帳號控制最少,預設值 |
1 | RejectInvalidFriendInvites(拒絕無效好友邀請) | 使ASF拒絕(而非忽略)無效的好友邀請 |
2 | RejectInvalidTrades(拒絕無效交易提案) | 使ASF拒絕(而非忽略)無效的交易提案 |
4 | RejectInvalidGroupInvites(拒絕無效群組邀請) | 使ASF拒絕(而非忽略)無效的群組邀請 |
8 | DismissInventoryNotifications(取消物品庫通知) | 使ASF自動取消所有物品庫通知 |
16 | MarkReceivedMessagesAsRead(將收到的訊息已讀) | 使ASF自動將所有收到的訊息標示成已讀 |
32 | MarkBotMessagesAsRead(將Bot訊息已讀) | 使ASF自動將所有從其他(執行於同一實例中的)ASF Bot的訊息標示成已讀 |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
在一般情形下,若您想要ASF有一定的自動化行為,像使用Bot帳號,而不是ASF主要帳號的那樣,就需要更改本屬性。 因此,本屬性主要用於小號,但您仍可在主要帳號上使用所選選項。
一般(None
)模式的ASF行為只是將使用者所想要的自動化(例如自動掛卡或進行SteamTradeMatcher
交易,如果在TradingPreferences
中有設定)。 這是對帳號控制最少的模式,並對大多數使用者來說都不錯,因為您可以完全控制您的帳號,且能自行決定是否允許某些超出範圍的交互行為。
無效的好友邀請是指由不具FamilySharing
或更高權限(定義於SteamUserPermissions
)的使用者所發出的好友邀請。 如您所預期的那樣,一般模式下的ASF會忽略這些邀請,給予您自由選擇是否接受邀請的空間。 RejectInvalidFriendInvites
會使這些邀請被自動拒絕,實際上這會阻止其他人將您加入至他們的好友清單中(因為ASF會拒絕所有這類請求,除非他們在SteamUserPermissions
中有被定義)。 除非您想要徹底拒絕所有好友邀請,否則您不應啟用本選項。
無效的交易提案是指不被ASF內建模組接受的交易。 關於本問題的更多資訊,可以在交易章節中找到,其中明確定義了ASF願意自動接受哪些類型的交易。 有效的交易還會被其他設定所定義,特別是TradingPreferences
。 RejectInvalidTrades
會使所有無效的交易提案被拒絕,而不是被忽略。 除非您想要直接拒絕所有ASF未自動接受的交易提案,否則您不應啟用本選項。
無效的群組邀請是指來自SteamMasterClanID
群組以外的邀請。 如您所預期的那樣,一般模式下的ASF會忽略這些邀請,使您能夠自行決定是否要加入特定的群組。 RejectInvalidGroupInvites
會使這些群組邀請被拒絕,使您無法加入SteamMasterClanID
以外的其他任何群組。 除非您想要徹底拒絕所有群組邀請,否則您不應啟用本選項。
若您開始對收到新物品的通知感到厭煩時,DismissInventoryNotifications
會是一個相當有用的功能。 ASF無法去除通知本身,因為它是您Steam用戶端內建的功能,但它能在收到通知後自動清除通知,這樣就不會留有「新物品在您的物品庫」的通知了。 若您希望自行評估所收到的物品(特別是ASF掛到的卡片),那麼很明顯您不應該啟用本選項。 但如果您快要開始被煩到抓狂了,切記這裡有個選項可以使用。
MarkReceivedMessagesAsRead
會自動將ASF執行的帳號所收到的所有訊息標示成已讀,包含私人及群組聊天。 這通常只應由小號所使用,以清除例如在執行ASF指令期間來自您的「新訊息」通知。 我們不建議在主要帳號上使用本選項,除非您希望能隔絕所有種類的訊息通知,包含在您離線時的通知,ASF仍會清除它們。
MarkBotMessagesAsRead
以類似的方式運作,但只會將Bot的訊息標示成已讀。 但請注意,在使用本選項時,若您的Bot與其他人都在群組聊天中,已知Steam在將聊天訊息標示成已讀時,也會將該訊息前的訊息標示成已讀,所以如果您不想要錯過在這期間的其他訊息,就應該避免使用本功能。 很顯然,當您在同一個ASF實例上執行多個主要帳號(例如其他使用者的帳號)時也是有風險的,因為您可能會錯過正常的無關ASF的訊息。
若您不確定如何設定本選項,最好保留預設值。
ImmutableHashSet<byte>
型別,預設值為空。 在ASF完成收集一套此處設定的物品類型時,它可以透過Steam交易傳送所有收集完成的物品套組自動傳送給具有Master
權限的使用者,如果您想將指定的Bot帳號用於例如STM比對等需求,同時將收集完成的套組移動至另一個帳號上,這將會非常方便。 本選項與loot
指令作用相同,因此請注意,首先它需要您有帳號的交易合法權限,且使用者具有Master
權限,而您可能也要有有效的SteamTradeToken
。
目前,在本設定中支援下列物品類型:
值 | 名稱 | 描述 |
---|---|---|
3 | FoilTradingCard(閃亮交換卡片) | 閃亮版本的TradingCard |
5 | TradingCard(交換卡片) | Steam交換卡片,用於合成徽章(非閃亮卡片) |
請注意,不論上述如何設定,ASF都只會處理Steam社群物品(appID
為753,contextID
為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。
由於使用本選項會造成額外負擔,我們建議您只在有機會收集完成物品的Bot帳號上使用⸺舉例來說,若您平常已在使用FarmingPreferences
中的SendOnFarmingFinished
偏好設定、SendTradePeriod
或loot
指令,就沒有必要使用本選項。
若您不確定如何設定本選項,最好保留預設值。
string
型別,預設值為null
。 在ASF掛卡時,可以顯示「非Steam遊戲中:CustomGamePlayedWhileFarming
」而非正在掛卡的遊戲名稱。 若您想讓您的朋友知道您正在掛卡,卻又不想使用Offline
的OnlineStatus
時,這就非常有用。 請注意,ASF無法保證Steam網路的實際顯示順序,因此這只能為一個建議值,可能會正確顯示,也可能不會。 特別是,如果ASF需要使用很長一段時間來完成已滿的32
個遊戲欄位,自訂名稱就無法顯示在Complex
的掛卡演算法中。 預設值null
會停用本功能。
ASF提供了數種您能在本文中使用的特殊變數。 {0}
會被取代成ASF正在掛卡的遊戲的AppID
;而{1}
會被取代成ASF正在掛卡的遊戲的GameName
。
string
型別,預設值為null
。 與CustomGamePlayedWhileFarming
類似,但是是用於ASF閒置的時候(因為帳號已掛卡完成)。 請注意,ASF無法保證Steam網路的實際顯示順序,因此這只能為一個建議值,可能會正確顯示,也可能不會。 若您與本選項同時使用GamesPlayedWhileIdle
,那麼請注意,GamesPlayedWhileIdle
的優先級更高,因此您不可以宣告超過31
個遊戲,否則CustomGamePlayedWhileIdle
會無法占用遊戲欄位來顯示自訂名稱。 預設值null
會停用本功能。
bool
型別,預設值為false
。 本屬性定義了是否啟用Bot。 啟用Bot實例(true
)會自動在ASF執行後開啟,而停用Bot實例(false
)就需要您手動開啟。 預設情形下,每個Bot都是停用的,因此您可能希望將需要自動啟動的Bot切換本屬性至true
。
ImmutableList<byte>
型別,預設值為空。 本屬性定義了指定Bot帳號的首選掛卡順序。 目前有以下可供使用的掛卡順序:
值 | 名稱 | 描述 |
---|---|---|
0 | Unordered(無序) | 無序,略微提升CPU效能 |
1 | AppIDsAscending(AppID升序) | 嘗試由最小的遊戲appIDs 開始掛卡 |
2 | AppIDsDescending(AppID降序) | 嘗試由最大的遊戲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
,來先以掉落可交易卡片的遊戲排序,然後再以最高徽章等級排序,最後才以字母順序排序。 正如您所猜測的,實際上順序非常重要,因為反向的排序(7
、11
及15
)會造成截然不同的結果(首先由字母順序排序,但由於遊戲名稱是唯一的,其他兩個排序實際上是無作用的)。 大多數的人可能只會使用其中一個順序,但如果您想要,您也可以透過額外的參數來進一步排序。
另請注意,在上述所有描述中都有字詞「嘗試」⸺ASF實際的排序受交換卡片掛卡演算法的嚴重影響,且排序只能影響ASF認為效能相同的結果。 舉例來說,在Simple
演算法中,選擇FarmingOrders
能影響全部的當前掛卡階段(因為每個遊戲都具有相同的效能值),但在Complex
演算法中,實際的掛卡順序會先受遊玩時數所影響,然後才依所選的FarmingOrders
排序。 這將產生不同的結果,因為具有遊玩時數的遊戲會優先於其他的,因此ASF會優先選擇已滿足HoursUntilCardDrops
要求的遊戲,然後才會依您選擇的FarmingOrders
進一步排序那些遊戲。 同樣,一旦ASF完成高優先遊戲的掛卡,它將會先依遊玩時數對佇列進行排列(因為這能減少將任何遊戲掛至HoursUntilCardDrops
所需的時間)。 因此,本設定屬性只是給ASF參考的一個建議,只要它不會對效能產生負面影響(若有負面影響,ASF則總是會在掛卡時優先考慮效能,其次才是FarmingOrders
)。
另外,您還可透過fq
指令來存取掛卡優先佇列。 若使用優先佇列,則實際的掛卡順序首先由效能排序,然後是掛卡佇列,最後才是您的FarmingOrders
。
byte flags
型別,預設值為0
。 本屬性定義了ASF的掛卡相關行為,定義如下:
值 | 名稱 |
---|---|
0 | 無 |
1 | FarmingPausedByDefault(使用預設行為暫停) |
2 | ShutdownOnFarmingFinished(在掛卡完成時關閉) |
4 | SendOnFarmingFinished(在掛卡完成時自動發送) |
8 | FarmPriorityQueueOnly(只掛卡優先佇列) |
16 | SkipRefundableGames(跳過可退款遊戲) |
32 | SkipUnplayedGames(跳過未遊玩過的遊戲) |
64 | EnableRiskyCardsDiscovery(啟用具風險的卡片檢測方式) |
128 | AutoSteamSaleEvent(自動完成 Steam 特賣活動) |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
所有選項的解說如下:
FarmingPausedByDefault
定義了CardsFarmer
模組的初始狀態。 通常Bot會在經由Enabled
或使用start
指令啟動時,自動開始掛卡。 若您希望手動resume
自動掛卡程序,可以使用FarmingPausedByDefault
。例如您只想使用play
,且永遠不會使用自動CardsFarmer
模組⸺這將與pause
指令的作用完全相同。
ShutdownOnFarmingFinished
使您能夠在掛卡完成時關閉Bot。 通常ASF會在程序執行過程中持續「占用」帳號。 在指定帳號完成掛卡後,ASF會(每隔IdleFarmingPeriod
小時)定期檢查,若在該段時間帳號新增了一些帶有Steam交換卡片的遊戲,那麼ASF能夠繼續掛該帳號的卡,而不用重啟整個程序。 這對於大多數人來說應該很有幫助,因為ASF能夠在需要時自動恢復掛卡。 但是,您也可能會希望在指定帳號掛卡完成後停止程序,這就需要設定本屬性。 啟用後,ASF將會在掛卡全數完成後登出帳號,這代表該帳號將不再被定期檢查或佔用。 您應該自行決定,會更希望ASF始終對Bot實例運作,或希望ASF在掛卡程序完成後停止它。 在所有帳號都終止運作,且程序未以--process-required
的模式執行時,ASF也會自行關閉,讓您的設備休息,使您能夠安排其他操作,例如在最後一張交換卡片掉落後睡眠或關機。
SendOnFarmingFinished
使您能夠自動將到目前為止所掛出的卡,使用交易提案發送給具有Master
權限的使用者,若您不想自行發送交易提案,這個功能會對您有所幫助。 本選項與loot
指令作用相同,因此請注意,首先它需要您有帳號的交易合法權限,且使用者具有Master
權限,而您可能也要有有效的SteamTradeToken
。 在本選項啟用時,ASF除了會在掛卡完成後執行loot
外,也會在(未掛卡時)每次收到新物品通知後,及在完成產生新物品的交易後執行loot
。 這在您把來自其他人的物品「轉發」到自己的帳號中時特別有用。 通常您會需要同時使用ASF雙重驗證,但若您傾向於手動確認雙重驗證,則這並不是必需的。
FarmPriorityQueueOnly
定義了ASF是否只自動掛卡您使用fq
指令加入至優先掛卡佇列中的應用程式。 在啟用本選項時,ASF將會跳過所有不在清單中的appIDs
,使您能夠挑選您想要ASF自動掛卡的遊戲。 請注意,若您沒有在佇列中加入任何遊戲,ASF會表現得像您帳號中沒有任何遊戲可以掛卡一樣。
SkipRefundableGames
定義了ASF在自動掛卡時,是否應跳過那些仍可退款的遊戲。 所謂可退款的遊戲,是您在過去2週內透過Steam商店購買、且遊玩時數不超過2小時的遊戲,如Steam退款頁面所述。 預設情形下,ASF會完全忽略Steam退款政策,掛所有能掛的遊戲,而這也是大多數人所想要的。 但是,如果您想確保ASF不會過快掛您的可退款遊戲,可以啟用這項旗標,使您能夠自行體驗遊戲,並在需要時退款,避免ASF影響您的遊玩時數。 請注意,如果您啟用本選項,會從您在Steam商店購買遊戲的14日內,ASF將不會掛該遊戲,若在此期間您的帳號沒有其他可掛的遊戲,ASF將會顯示為閒置。
SkipUnplayedGames
定義了ASF是否應跳過您尚未執行過的遊戲。 尚未執行過的遊戲,指的是在您Steam上完全沒有任何遊玩時數的遊戲。 若您啟用這項旗標,那麼這類遊戲將始終被跳過,直到Steam紀錄下任何遊玩時數。 這使您能夠更便於控制ASF能掛哪些遊戲,跳過那些您還未有機會嘗試的遊戲,並讓一些Steam的功能更加實用⸺例如推薦尚未遊玩過的遊戲。
EnableRiskyCardsDiscovery
啟用了額外的後援機制,在ASF因無法載入一個或多個徽章頁面,無法找到能掛卡的遊戲時觸發。 特別是那些因掉卡數量極大的帳號,可能會有無法再載入徽章頁面的情形(因伺服器負擔過重),而這些帳號也無法專用於掛卡,因為我們無法載入啟動掛卡流程所需的資訊。 對於這些個例,本選項允許使用替代演算法,也就是利用帳號可合成的擴充包及當前所擁有的擴充包,來找出可能的遊戲來掛卡,並花費大量的資源來驗證並擷取所需資訊,嘗試在資料及資訊有限的情形下開始掛卡,藉此來使徽章頁面能夠恢復正常載入,並回歸使用一般的演算法。 請注意,在使用本後援方式時,ASF只能依有限資料來操作,因此ASF找到比實際數量還少得多的可掉卡片,是完全正常的⸺未被發現的可掉卡片將會依掛卡過程在稍後被逐漸找出。
本選項被稱作「具風險的」是有原因的⸺這個方式非常緩慢,並需要消耗大量資源(包含網路請求)來完成,因此不建議啟用,特別是長期開啟著。 您只應在因認為當前帳號無法載入徽章頁面,而導致ASF失去作用,無法獲得啟動掛卡過程所需資訊時,才使用本選項。 即使我們盡力去最佳化這個過程,本選項仍有可能造成適得其反的結果,例如因為傳送過多請求,對Steam伺服器造成過大的負擔,而被暫時甚至是永久封鎖。 因此,我們在此提前警告您,本選項不提供任何保證,您需自行承擔使用它的風險。
AutoSteamSaleEvent
使您能夠在Steam夏季/冬季特賣期間,透過每天瀏覽探索佇列來獲得額外的交換卡片。 啟用本選項時,ASF會每隔8
小時自動檢查Steam探索佇列(從程式啟動一小時內開始),並在需要時完成它。 若您想自己執行該行為,則不建議使用本選項,因為在一般情形下本選項只對Bot帳號有意義。 請注意,由於Valve經常產生問題或改動,我們無法保證本功能是否能運作正常,因此本選項是很有可能完全無效的。 我們不接受任何相關的錯誤報告,也不支援關於本選項的請求。 這是在沒有任何保證的情形下所提供的,您需要自行承擔風險。
<ImmutableHashSet<uint>
型別,預設值為空。 若ASF沒有遊戲可供掛卡,它可以遊玩您所指定的Steam遊戲(appIDs
)。 以這種方式遊玩遊戲會增加您的「遊玩時數」,除此之外,別無他用。 若要使此功能正常運作,您的Steam帳號必須擁有您指定的所有AppIDs
的有效授權,包含免費遊戲。 本功能可以與CustomGamePlayedWhileIdle
同時啟用,能在遊玩您所指定的遊戲的同時在Steam網路中顯示自訂狀態。但在這種情形下,如同CustomGamePlayedWhileFarming
一樣,我們無法保證實際的顯示順序。 請注意,Steam只允許ASF最多同時遊玩32
個appIDs
,因此您也只能在本屬性中設定最多這個數量的遊戲。
byte
型別,預設值為3
。 本屬性定義了帳號是否受到掉卡限制,若有,則定義初始小時數。 掉卡受限制代表該帳號在遊戲的遊玩時數在到達HoursUntilCardDrops
小時後才會開始掉卡。 但ASF沒有自動偵測它的魔法,所以只能靠您手動設定。 本屬性會影響您所使用的掛卡演算法。 正確設定本屬性會最大化您的效益,並將掛卡所需的時間減至最少。 記住,您應該選擇何值並沒有確切的答案,因為這完全取決於您的帳號。 似乎從未要求退款的老帳號掉卡不受限制,而曾經要求退款的新帳號則會受限制。 但是,這只是理論,不應將它視為規則。 本屬性的預設值是依據「兩害相權取其輕」及大多數使用情形所設定的。
ImmutableHashSet<byte>
型別,預設值為1, 3, 5
的Steam物品類型。 本屬性定義了ASF在獲得物品時的行為⸺這可以是手動使用指令,也可以透過一個或多個設定屬性來自動獲得。 請注意,不論上述如何設定,ASF都只會處理Steam分類(appID
為753)中的社群物品(contextID
為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。
值 | 名稱 | 描述 |
---|---|---|
0 | Unknown(未知) | 不符合下列任一項類型的物品 |
1 | BoosterPack(擴充包) | 包含三張來自同一遊戲交換卡片的擴充包 |
2 | Emoticon(表情符號) | 在Steam聊天中使用的表情符號 |
3 | FoilTradingCard(閃亮交換卡片) | 閃亮版本的TradingCard |
4 | ProfileBackground(個人檔案背景) | 在您Steam個人檔案中使用的個人檔案背景 |
5 | TradingCard(交換卡片) | Steam交換卡片,用於合成徽章(非閃亮卡片) |
6 | SteamGems(寶石) | 用於合成擴充包的Steam寶石,包含一袋寶石 |
7 | SaleItem(特賣物品) | Steam特賣期間獲得的特殊物品 |
8 | Consumable(消耗品) | 在使用後會消失的特殊消耗品 |
9 | ProfileModifier(個人檔案修改器) | 可以修改Steam個人檔案外觀的特殊物品 |
10 | Sticker(貼紙) | 在Steam聊天中使用的特殊物品 |
11 | ChatEffect(聊天效果) | 在Steam聊天中使用的特殊物品 |
12 | MiniProfileBackground(迷你個人檔案背景) | Steam個人檔案的特殊背景 |
13 | AvatarProfileFrame(個人檔案圖示邊框) | Steam個人檔案的特殊圖示邊框 |
14 | AnimatedAvatar(動畫個人圖示) | Steam個人檔案的特殊動畫個人圖示 |
15 | KeyboardSkin(鍵盤外觀) | Steam Deck的特殊鍵盤外觀 |
16 | StartupVideo(啟動動畫) | Steam Deck的特殊啟動動畫 |
請注意,不論上述如何設定,ASF都只會處理Steam社群物品(appID
為753,contextID
為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。
ASF的預設設定是依據最常見的Bot用法,即只獲得擴充包及交換卡片(包含閃亮卡片)。 本處定義的屬性使您能夠依自己所需自訂該行為。 請注意,上述所有未定義的類型都會顯示成Unknown
類型,特別是在Valve發布一些新的Steam物品時,ASF也會將它們標示成Unknown
,直到它們(在未來的版本中)被加入於本表格中。 這也是在一般情形下不建議在LootableTypes
中選擇Unknown
類型的原因,除非您知道自己正在做什麼,且您也了解萬一Steam網路再次損毀時,會將您的所有物品標示成Unknown
,並在交易提案中發送出您物品庫中的所有物品。 我強烈建議即使您希望獲得所有(其他的)物品,也不要在LootableTypes
中選擇Unknown
類型。
ImmutableHashSet<byte>
型別,預設值為5
的Steam物品類型。 本屬性定義了在您啟用TradingPreferences
中的SteamTradeMatcher
選項時,允許用於比對的Steam物品類型。 類型定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | Unknown(未知) | 不符合下列任一項類型的物品 |
1 | BoosterPack(擴充包) | 包含三張來自同一遊戲交換卡片的擴充包 |
2 | Emoticon(表情符號) | 在Steam聊天中使用的表情符號 |
3 | FoilTradingCard(閃亮交換卡片) | 閃亮版本的TradingCard |
4 | ProfileBackground(個人檔案背景) | 在您Steam個人檔案中使用的個人檔案背景 |
5 | TradingCard(交換卡片) | Steam交換卡片,用於合成徽章(非閃亮卡片) |
6 | SteamGems(寶石) | 用於合成擴充包的Steam寶石,包含一袋寶石 |
7 | SaleItem(特賣物品) | Steam特賣期間獲得的特殊物品 |
8 | Consumable(消耗品) | 在使用後會消失的特殊消耗品 |
9 | ProfileModifier(個人檔案修改器) | 可以修改Steam個人檔案外觀的特殊物品 |
10 | Sticker(貼紙) | 在Steam聊天中使用的特殊物品 |
11 | ChatEffect(聊天效果) | 在Steam聊天中使用的特殊物品 |
12 | MiniProfileBackground(迷你個人檔案背景) | Steam個人檔案的特殊背景 |
13 | AvatarProfileFrame(個人檔案圖示邊框) | Steam個人檔案的特殊圖示邊框 |
14 | AnimatedAvatar(動畫個人圖示) | Steam個人檔案的特殊動畫個人圖示 |
15 | KeyboardSkin(鍵盤外觀) | Steam Deck的特殊鍵盤外觀 |
16 | StartupVideo(啟動動畫) | Steam Deck的特殊啟動動畫 |
當然,您通常在本屬性只應選擇2
、3
、4
及5
,因為STM只支援這些類型。 ASF擁有能夠判斷物品稀有度的正確邏輯,因此比對表情符號或背景也會是安全的,因為ASF只會將來自同一個遊戲、相同類型及稀有度的物品視為相等的。
請注意,ASF並非交易機器人,且不會考慮物品的市場價格。 若您不認為在同一組中稀有度相同的物品是等價的,那麼這個選項並不適合您使用。 如果您決定更改本設定,請先理解並同意此聲明,並再次評估風險。
除非您知道您在做什麼,否則請保留預設值5
。
ushort flags
型別,預設值為0
。 本屬性可以當作OnlineStatus
的補充功能,指定向Steam網路發布額外的在線狀態。 需要OnlineStatus
不為Offline
,定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 無特殊在線狀態旗標,預設值 |
256 | ClientTypeWeb(用戶端網頁類型) | 用戶端使用Web介面 |
512 | ClientTypeMobile(行動裝置用戶端類型) | 用戶端使用行動裝置應用程式 |
1024 | ClientTypeTenfoot(Big Picture用戶端類型) | 用戶端使用Big Picture模式 |
2048 | ClientTypeVR(SteamVR用戶端類型) | 用戶端使用SteamVR頭戴式裝置 |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
本屬性依據的基本EPersonaStateFlag
型別包含了更多可供使用的旗標,但據我們所知,直到目前它們還仍無任何效果,因此為了可見性將它們刪除了。
若您不確定如何設定本屬性,請保留預設值0
。
byte
型別,預設值為1
。 本屬性指定了Bot在登入Steam網路後,要顯示的Steam社群狀態。 目前您可以選擇下列狀態之一:
值 | 名稱 |
---|---|
0 | Offline(離線) |
1 | Online(線上) |
2 | Busy(請勿打擾) |
3 | Away(離開) |
4 | Snooze(打盹) |
5 | LookingToTrade(尋找交易對象) |
6 | LookingToPlay(尋找遊戲對象) |
7 | Invisible(隱藏) |
Offline
狀態對於主要帳號來說非常有用。 如您所知,遊戲掛卡時會顯示您的Steam狀態為「正在遊玩:XXX」,這可能會誤導您的朋友,讓他們以為您真的正在玩遊戲,但實際上您只是在掛卡而已。 使用Offline
的狀態能夠解決此問題:在您使用ASF掛卡時,您的帳號不會再被顯示成「遊戲中」。 能這樣做是因為ASF不必登入至Steam社群就能正常運作,所以即使實際上我們正在玩這些遊戲,且連線至Steam網路中,但仍能不顯示我們的在線狀態。 請注意,使用離線狀態遊玩的遊戲仍會增加您的遊玩時數,並在您個人檔案中顯示成「最近遊玩過的」遊戲。
除此之外,若您希望在ASF執行時能夠接收到通知及未讀訊息,且不用打開Steam用戶端,那麼本功能就很重要。 這是因為ASF把自身當作一個Steam用戶端,不論ASF是否願意,Steam都會向它廣播所有的訊息及事件。 若您同時執行ASF及您自己的Steam用戶端,這就不會是個問題,因為全部的用戶端都會收到完全相同的事件廣播。 但是,如果只有ASF在執行,Steam網路就會將部分事件及訊息標示成「已送達」,但您原版的Steam用戶端將會因為不在線上而接收不到這些訊息。 離線的狀態能夠解決此問題,因為在這種情形下,ASF不再會接收任何社群事件,因此所有未讀訊息與其餘事件都會在您回來後仍維持著未讀狀態。
特別注意,在Offline
模式下執行的ASF將不能以一般的Steam聊天方式接收指令,因為此時聊天系統與整個社群都是離線狀態。 解決此問題的方式是使用Invisible
模式,它以相似的方式運作(但不會暴露您的狀態),且能夠保有接收及回應訊息的能力(因此如上所述,仍能清除通知及未讀訊息)。 Invisible
主要適用於您不想暴露狀態,但仍需要傳送指令的小號上。
但是,Invisible
模式具有一個問題:它並不是很適合用在主要帳號上。 這是因為任何的Steam連線階段都會將在線狀態公開,即使ASF並無此意。 這是由目前的Steam網路的限制/錯誤所導致的,無法由ASF這端修復。所以若您想要使用Invisible
模式,您也需要確保其他所有登入階段都有著相同的Invisible
模式。 對於小號來說,ASF通常會是它唯一的登入階段;但對於主要帳號而言,通常您會想要向朋友們顯示您為Online
,並隱藏ASF的活動,在這種情形下,Invisible
對您來說一點用處也沒有(我們建議您改用Offline
模式)。 希望Valve將來能夠解決掉這個限制/錯誤,但我不認為這會在短期之內發生…
若您不確定如何設定這個屬性,建議您為主要帳號設定0
(Offline
),而其他帳號使用預設值1
(Online
)。
byte
型別,預設值為0
(PlainText
)。 本屬性定義了SteamPassword
屬性的格式,目前的支援值請見安全性章節。 您應該遵循該章節的步驟,因為您需要確保SteamPassword
屬性確實含有符合PasswordFormat
的密碼。 也就是說,在您更改PasswordFormat
的時候,您的Password
就必須已經是您所選的格式了,而不是在更改完成後才是。 除非您知道您在做什麼,否則請保留預設值0
。
若您至少更改了一次已登入Bot的PasswordFormat
,您有可能在下次Bot啟動時收到一次性的解密錯誤⸺這是因為PasswordFormat
也被用於自動加密/解密Bot.db
資料庫檔案中的敏感屬性。 您可以安全的無視這項錯誤,因為ASF能夠自動從這個情形中恢復。 但如果持續發生,例如在每次重新啟動時,就應該進行更進一步的調查。
byte flags
型別,預設值為0
。 本屬性定義了ASF在兌換產品序號時的行為,定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 預設值,無特殊兌換偏好 |
1 | Forwarding(轉發) | 將無法兌換的產品序號轉發給其他Bot |
2 | Distributing(分配) | 將所有產品序號分配給自身及其他Bot |
4 | KeepMissingGames(保留缺失遊戲) | 在轉發時保留(可能)缺少遊戲的產品序號,讓它們維持未使用狀態 |
8 | AssumeWalletKeyOnBadActivationCode(假定無法啟用的序號為禮物卡序號) | 將BadActivationCode 產品序號假定成與CannotRedeemCodeFromClient 相同,並因此嘗試將它們作為禮物卡序號兌換 |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
Forwarding
會使Bot在(檢查到)另一個已連線並登入的Bot未擁有這個遊戲時,將這個無法兌換的產品序號轉發給它。 最常見的情形是將AlreadyPurchased
遊戲轉發給另一個尚未擁有該遊戲的Bot,但本選項亦也會轉發其他情形下的產品序號,例如:DoesNotOwnRequiredApp
、RateLimited
或RestrictedCountry
。
Distributing
會使Bot將所有收到的產品序號分配給自身以及其他Bot。 這代表每個Bot會在每批分配中獲得一個產品序號。 通常這個功能只會用於您為同一個遊戲兌換大量序號時,且您希望將它們平均分配至所有的Bot中,而非使用於兌換不同種類遊戲時。 若您只有在redeem
操作中兌換單一個產品序號,則此功能沒有任何作用(因為沒有任何可分配的序號)。
KeepMissingGames
會使Bot在無法確定產品序號所啟用的遊戲是否為自身所擁有時,跳過Forwarding
。 這基本上代表了Forwarding
將只對AlreadyPurchased
序號有效,而不再會轉發其他情形的序號,例如DoesNotOwnRequiredApp
、RateLimited
或RestrictedCountry
。 通常您會想要在主要帳號上使用這個選項,來確保當您的Bot暫時觸發RateLimited
時,不會將本應在該Bot上兌換的產品序號被轉發。 正如您從描述中所猜測的那樣,若Forwarding
沒有被啟用,則本欄位將沒有任何作用。
AssumeWalletKeyOnBadActivationCode
會使BadActivationCode
的產品序號被當作CannotRedeemCodeFromClient
,並使ASF嘗試將它們作為禮物卡序號兌換。 需要本選項是因為Steam可能將禮物卡序號當作BadActivationCode
(而非正確的CannotRedeemCodeFromClient
),導致ASF永遠不會去嘗試兌換它們。 但是,我們建議避免使用本設定,因為這會使ASF嘗試將每個無效序號作為禮物卡序號兌換,因而Steam服務傳送大量的(無效)請求,造成所有可能的後果。 作為代替,我們建議您於明確知道在兌換禮物卡序號時,使用ForceAssumeWalletKey
的redeem^
模式,這是只在需要時啟用本模式的解決方案。
同時啟用Forwarding
與Distributing
會在轉發的功能上增加分配的功能,使ASF會先嘗試在所有Bot上兌換一個產品序號(轉發),然後才會使用下一個序號(分配)。 通常您這樣設定是希望使用Forwarding
,並改變Bot在使用完序號時的切換行為,不再總依順序使用每一個序號(單獨設定Forwarding
的行為)。 在您已知大多數甚至所有產品序號都被綁定到同一款遊戲上時,這項行為會非常有用,因為在這種情形下只使用Forwarding
會先在一個Bot上嘗試兌換所有序號(適用於您的序號屬於不同的遊戲時),而同時使用Forwarding + Distributing
將會在兌換下一個序號時切換Bot,將兌換新序號的工作「分配」至另一個Bot上,而不是由初始的Bot繼續(適用於序號為相同遊戲時,能跳過每個序號無意義的兌換嘗試)。
在兌換時Bot的實際順序是依字母排序,不包含無法使用的Bot(未連線、已停止或其他情形)。 請注意,每個IP及帳號都有每小時兌換嘗試次數的限制,且每個不以OK
結束的兌換都代表兌換失敗。 ASF會盡力減少AlreadyPurchased
的失敗次數,例如:嘗試避免向已擁有該遊戲的Bot轉發產品序號,但由於Steam處理遊戲授權的方式,我們無法保證這總是有效運作。 使用Forwarding
或Distributing
等兌換旗標,一定會增加您觸發RateLimited
的可能性。
也請注意,您無法轉發或分配序號給沒有權限的Bot。 這應該很容易理解,且您需要確保在兌換過程中,至少擁有所有Bot的Operator
權限,例如使用status ASF
指令來檢查。
byte flags
型別,預設值為3
。 本屬性定義了每個Bot在與遠端通訊時的行為,定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 不允許與第三方通訊,使所選的ASF功能無法使用 |
1 | SteamGroup(Steam群組) | 允許與ASF的Steam群組通訊 |
2 | PublicListing(公開名單) | 允許與ASF的STM名單通訊以顯示於名單上,需同時啟用TradingPreferences 中的SteamTradeMatcher
|
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
本選項並未包含ASF所提供的所有第三方通訊,只包含了那些在其他設定中未包含的選項。 舉例來說,如果您已啟用ASF的自動更新,ASF就會依照您的設定,與GitHub(用於下載)及我們的伺服器(用於核對和驗證)通訊。 同理,在TradingPreferences
中啟用MatchActively
就代表了與我們的伺服器通訊,以獲得名單中的Bot,這是該功能所必需的。
有關本項目的詳細說明,請參閱遠端通訊章節。 除非您有理由編輯此屬性,否則您應維持它為預設值。
byte
型別,預設值為0
。 本屬性的運作方式與FarmingPreferences
中的SendOnFarmingFinished
偏好設定極為相似,只有一處不同⸺不是在掛卡完成時發送交易提案,而是不論我們掛了多少,每隔SendTradePeriod
小時就發送一次。 如果您想要固定時間loot
您的小號,而不是等到掛卡完成,則這會對您很有幫助。 預設值0
會停用本功能,若您想要讓您的Bot向您發送交易提案,例如每天一次,那麼您應該將此處設定成24
。
通常您會需要同時使用ASF雙重驗證,但若您傾向於手動確認雙重驗證,則這並不是必需的。 若您不確定如何設定本屬性,請保留預設值0
。
string
型別,預設值為null
。 本屬性定義了您的Steam使用者名稱⸺在登入Steam時使用。 除了在此處定義Steam使用者名稱外,若您想要在每次啟動ASF時手動輸入您的使用者名稱,而不是將它儲存於設定檔中,您也可以保留預設值null
。 如果您不想要在設定檔中儲存敏感性資料,這或許是更好的方法。
ulong
型別,預設值為0
。 本屬性定義了Bot應自動加入的Steam群組ID及其聊天室。 您可以透過前往群組首頁,然後在連結的末端加上/memberslistxml?xml=1
來查詢群組ID,整個連接將會看起來像這樣。 然後您就可以在結果頁面的<groupID64>
標籤下獲得您的群組ID。 在上述範例中,即為103582791440160998
。 除了在啟動時嘗試加入指定的群組,Bot還會自動接受來自該群組的邀請,使您能夠在您的群組為私人群組時,手動邀請您的Bot加入。 若您沒有專屬於Bot的群組,則應該維持預設值0
。
string
型別,預設值為null
。 本屬性定義了您的家庭監護PIN碼。 ASF需要存取由家庭監護系統所保護的資源,因此若您使用了這項功能,您應該提供ASF家庭監護的解鎖PIN碼,使它能夠正常運作。 預設值null
代表不需要任何的家庭監護PIN碼來解鎖此帳號,如果您沒有使用Steam的家庭監護功能,就不需要更改。
在有限的情況下,ASF也能夠生成有效的Steam家庭監護PIN碼,但這會需要大量的系統資源及時間來完成,且無法保證能成功,因此我們建議不要依賴這項功能,而是在設定檔中設定有效的SteamParentalCode
。 若ASF認為需要PIN碼,且無法自行產生,就會要求您輸入。
string
型別,預設值為null
。 本屬性定義了您的Steam密碼⸺在登入Steam時使用。 除了在此處定義Steam密碼外,若您想要在每次啟動ASF時手動輸入您的密碼,而不是將它儲存於設定檔中,您也可以保留預設值null
。 如果您不想要在設定檔中儲存敏感性資料,這或許是更好的方法。
string
型別,預設值為null
。 當您的Bot在您的好友名單中,Bot就能不需交易權杖直接向您發送交易提案,因此您可以保留本屬性的預設值為null
。 但若您決定讓Bot不在您的好友名單中,您就需要為想要向其發送交易提案的Bot生成一個交易權杖,並填寫至此處。 也就是說,本屬性應填寫此Bot實例在SteamUserPermissions
中設定的Master
權限帳號的交易權杖。
要找到您的權杖,須以Master
權限的使用者登入,並前往這裡,然後查看您的交易URL。 要找到您的權杖,須以Master
權限的使用者登入,並前往這裡,然後查看您的交易URL。 您應該複製這8個字元並於此處貼上,作為SteamTradeToken
。 請不要包含整個交易URL,也不需&token=
部分,只需要權杖就好(8個字元)。
ImmutableDictionary<ulong, byte>
型別,預設值為空。 本屬性為字典屬性,將由64位元的Steam ID所識別的Steam使用者,映射到由byte
編號所定義在ASF實例中的權限。 目前在ASF中可用的Bot權限定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 無特殊權限,這主要是指派給不在本字典內的Steam ID的參考值⸺您不需要定義具有本項權限的任何人 |
1 | FamilySharing(親友同享) | 為親友同享使用者提供的最低權限。 同樣,這也是個參考值,因為ASF能夠自動發現有權使用我們收藏庫的親友同享帳號的Steam ID |
2 | Operator(管理者) | 提供指定Bot實例的基本權限,主要包含加入遊戲授權及兌換產品序號 |
3 | Master(擁有者) | 提供指定Bot實例的完整權限 |
簡而言之,本屬性使您能夠自訂指定使用者的權限。 權限設定很重要,主要用於存取ASF指令,而且也用於啟用許多ASF功能,例如接受交易提案。 舉例來說,您可能會想將自己的帳號設定成Master
,並為您的兩到三位朋友提供Operator
權限,使他們能夠使用ASF為您的Bot兌換產品序號,但卻無法終止它。 因此,您可以輕鬆將權限指派給指定的使用者,並讓他們在您規定的範圍內使用您的Bot。
我們建議您只設定一個Master
,而Operators
及更低階的權限則不限量。 雖然以技術層面而言,ASF能設定多個Masters
且能正常運作,例如接受發送給那些Bot的所有交易提案;但對於要求為單一目標的每個操作,ASF將只會使用其中一個Bot(擁有最小Steam ID者),例如loot
請求,FarmingPreferences
中的SendOnFarmingFinished
偏好設定或SendTradePeriod
屬性等。 若您完全了解這些限制,特別是loot
請求將總是會把物品發送給擁有最小Steam ID的Master
,而不會管實際執行該指令的Master
是誰,那麼,您可以在這裡定義多個Master
權限使用者,但我們仍建議您選擇單一Master的方案。
值得一提的是,還有一個Owner
權限,是於SteamOwnerID
全域設定屬性中宣告。 您無法為這裡的任何人指派Owner
權限,因為SteamUserPermissions
屬性只定義了與Bot實例的權限,而非整個ASF程序。 對於與Bot相關的工作,SteamOwnerID
被視為與Master
相同,因此也沒有必要在這裡定義您的SteamOwnerID
。
byte
型別,預設值為60
。 通常ASF會在收到通知後處理收到的交易提案,但有時候也會因Steam故障而未能做到,此時交易提案將會持續被忽略,直到下一個交易通知或Bot重新啟動,這或許會導致交易被取消,或物品在稍後變為無法使用。 若本參數設定成非零值,ASF還將會每隔TradeCheckPeriod
分鐘檢查這類未完成的交易。 我們選擇預設值時,已考慮到對Steam伺服器的額外請求及遺失收到的交易提案間的平衡。 但是,如果您的ASF只用來掛卡,且不打算自動處理任何收到的交易,那麼您可以設定成0
來完全停用本功能。 除此之外,若您的Bot參與了公開的ASF STM名單,或作為交易機器人來提供其他的自動化服務,您可能會想要將本參數降低到15
分鐘左右,以便及時處理交易。
byte flags
型別,預設值為0
。 本屬性定義了ASF在交易時的行為,定義如下:
值 | 名稱 | 描述 |
---|---|---|
0 | 無 | 預設值,無特殊交易偏好 |
1 | AcceptDonations(接受禮物) | 接受我們不提供任何東西的交易 |
2 | SteamTradeMatcher(Steam交易比對器) | 被動參與STM交易。 造訪交易以深入了解更多資訊 |
4 | MatchEverything(比對所有物品) | 需要設定SteamTradeMatcher ,並與其同時使用⸺除了有利及均衡的交易外,亦接受不利交易 |
8 | DontAcceptBotTrades(不接受Bot交易) | 不自動接受來自其他Bot實例的loot 交易 |
16 | MatchActively(積極比對) | 主動參與STM交易。 造訪ItemsMatcherPlugin以深入了解更多資訊 |
請注意,本屬性為flags
欄位,因此可以使用所有可用值任意組合。 若您想深入了解更多資訊,請參閱JSON映射。 不啟用任何旗標即為None
選項。
若要進一步了解ASF的交易邏輯,與所有可供使用的旗標的說明,請造訪交易章節。
ImmutableHashSet<byte>
型別,預設值為1, 3, 5
的Steam物品類型。 本屬性定義了在使用transfer
指令時,可在Bot間轉移的物品類型。 ASF會確保只有在TransferableTypes
中的物品才會包含在交易提案中,因此本屬性使您能夠選擇您想要Bot在交易提案中收到的物品種類。
值 | 名稱 | 描述 |
---|---|---|
0 | Unknown(未知) | 不符合下列任一項類型的物品 |
1 | BoosterPack(擴充包) | 包含三張來自同一遊戲交換卡片的擴充包 |
2 | Emoticon(表情符號) | 在Steam聊天中使用的表情符號 |
3 | FoilTradingCard(閃亮交換卡片) | 閃亮版本的TradingCard |
4 | ProfileBackground(個人檔案背景) | 在您Steam個人檔案中使用的個人檔案背景 |
5 | TradingCard(交換卡片) | Steam交換卡片,用於合成徽章(非閃亮卡片) |
6 | SteamGems(寶石) | 用於合成擴充包的Steam寶石,包含一袋寶石 |
7 | SaleItem(特賣物品) | Steam特賣期間獲得的特殊物品 |
8 | Consumable(消耗品) | 在使用後會消失的特殊消耗品 |
9 | ProfileModifier(個人檔案修改器) | 可以修改Steam個人檔案外觀的特殊物品 |
10 | Sticker(貼紙) | 在Steam聊天中使用的特殊物品 |
11 | ChatEffect(聊天效果) | 在Steam聊天中使用的特殊物品 |
12 | MiniProfileBackground(迷你個人檔案背景) | Steam個人檔案的特殊背景 |
13 | AvatarProfileFrame(個人檔案圖示邊框) | Steam個人檔案的特殊圖示邊框 |
14 | AnimatedAvatar(動畫個人圖示) | Steam個人檔案的特殊動畫個人圖示 |
15 | KeyboardSkinKeyboardSkin(鍵盤外觀) | Steam Deck的特殊鍵盤外觀 |
16 | StartupVideo(啟動動畫) | Steam Deck的特殊啟動動畫 |
請注意,不論上述如何設定,ASF都只會處理Steam社群物品(appID
為753,contextID
為6),因此依據定義所有遊戲物品、禮物等物品都會被排除在交易提案之外。
ASF的預設設定是依據最常見的Bot用法,即只交易擴充包及交換卡片(包含閃亮卡片)。 本處定義的屬性使您能夠依自己所需自訂該行為。 請注意,上述所有未定義的類型都會顯示成Unknown
類型,特別是在Valve發布一些新的Steam物品時,ASF也會將它們標示成Unknown
,直到它們(在未來的版本中)被加入於本表格中。 這也是在一般情形下不建議在TransferableTypes
中選擇Unknown
類型的原因,除非您知道自己正在做什麼,且您也了解萬一Steam網路再次損毀時,會將您的所有物品標示成Unknown
,並在交易提案中發送出您物品庫中的所有物品。 我強烈建議即使您希望交易所有物品,也不要在TransferableTypes
中選擇Unknown
類型。
bool
型別,預設值為true
。 本屬性定義了ASF是否應該為此Steam帳號使用登入金鑰機制。 登入金鑰的機制運作方式與官方的「記住我」選項非常相似,使得ASF可以儲存並使用一次性登入金鑰來進行下一次的登入嘗試,只要我們的登入金鑰一直有效,就可以跳過提供密碼、Steam Guard或雙重驗證代碼的要求。 登入金鑰儲存於BotName.db
檔案中,且會自動更新。 這就是為什麼您在成功登入一次以後,不用再輸入密碼/Steam Guard/雙重驗證代碼的原因。
為了使您方便,預設情形下會使用登入金鑰,使您不用在每次登入時都需要輸入SteamPassword
、Steam Guard或雙重驗證代碼(在未使用ASF雙重驗證時)。 這也是種更佳的代替方式,因為登入金鑰是一次性的,且這不會以任何方式洩漏您的原始密碼。 您的Steam用戶端就是使用完全相同的方式,來儲存您的帳號名稱及登入金鑰,以用於下次登入嘗試,這實際上與在ASF中使用SteamLogin
及UseLoginKeys
,並留空SteamPassword
時完全相同。
但是,仍會有某些人擔心這個微不足道的細節,因此如果您想確保ASF不會儲存任何類型的權杖,以在關閉後回復上一個連線階段,可以啟用本選項。這會導致在每次登入嘗試時,都必須經過完整的驗證流程。 停用本選項與在官方Steam用戶端中取消勾選「記住我」的作用是完全相同的。 除非您知道您在做什麼,否則請保留預設值true
。
byte
型別,預設值為0
。 本屬性指定了Bot在登入Steam網路後使用的使用者介面模式。 目前您可以選擇下列模式之一:
值 | 名稱 |
---|---|
0 |
Default(預設模式) |
1 |
BigPicture(Big Picture模式) |
2 |
Mobile(行動裝置) |
若您不確定如何設定本屬性,請保留預設值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內部檔案的風險,例如因錯誤備份的方式。
log.txt
檔案儲存著您上一次執行ASF時所產生的紀錄日誌。 本檔案並未包含任何敏感性資訊,在與問題、崩潰相關,或提供上次執行ASF時的資訊時非常有用。 若您遇到的問題或錯誤,我們經常會需要這份檔案。 ASF會自動為您管理這份檔案,但如果您是進階使用者,您也可以進一步調整ASF的紀錄日誌模組。
config
資料夾是儲存ASF及其他所有Bot的設定檔的地方。
ASF.json
是ASF的全域設定檔。 本設定檔是用來定義ASF程序的行為,這會影響所有Bot及程式自身。 您可以在那裡找到全域屬性,例如ASF程序的擁有者、自動更新或除錯設定。
BotName.json
是特定Bot實例的設定檔。 本設定檔用於定義特定Bot實例的行為,因此這些設定只會對該Bot有效,而不會共用於其他Bot上。 這使您可以透過設定不同的設定,來使它們不必以完全相同的方式來運作。 每個Bot都使用由您選擇的BotName
唯一識別碼命名。
除了設定檔外,ASF還使用config
資料夾來儲存資料庫。
ASF.db
是ASF的全域資料庫檔案。 它是一個全域的持久儲存器,用來儲存各種與ASF程序相關的資訊,例如當地的Steam伺服器IP位址。 您不應該編輯這個檔案。
BotName.db
是特定Bot實例的資料庫。 本檔案用於在持久儲存器中儲存特定Bot實例的關鍵資料,例如登入金鑰或ASF雙重驗證代碼。 您不應該編輯這個檔案。
BotName.keys
是一個特殊檔案,用於向背景序號啟動器匯入產品序號。 它並非必須存在,也並不是由ASF所產生,但ASF會辨識此檔案。 這個檔案會在所有序號都成功匯入後被自動刪除。
BotName.maFile
是一個特殊檔案,用於匯入ASF雙重驗證。 它並非必須存在,也並不是由ASF所產生,但如果您的BotName
還尚未啟用ASF雙重驗證,ASF會辨識此檔案。 這個檔案會在ASF雙重驗證成功匯入後被自動刪除。
每個設定屬性都具有相應的型別。 屬性的型別定義了該屬性的有效值。 您只能使用由指定型別規定的有效值⸺如果您使用了無效值,ASF則會無法剖析您的設定檔。
我們強烈建議使用設定檔生成器來生成設定檔⸺它能夠幫您處理大部分的底層事務(例如型別驗證),因此您只需要輸入正確的值,而不需要了解下文所述的變數型別。 本章節主要適用於手動生成/編輯設定檔的人,使他們能夠知道哪些值能夠使用。
ASF使用了原生的C#型別,具體如下:
bool
⸺布林型別,只接受true
及false
值。
範例:"Enabled": true
byte
⸺無號位元組型別,只接受從0
至255
(包含)的整數。
範例:"ConnectionTimeout": 90
ushort
⸺無號短整數型別,只接受從0
至65535
(包含)的整數。
範例:"WebLimiterDelay": 300
uint
⸺無號整數型別,只接受從0
至4294967295
(包含)的整數。
ulong
⸺無號長整數型別,只接受從0
至18446744073709551615
(包含)的整數。
範例:"SteamMasterClanID": 103582791440160998
string
⸺字串型別,接受任何字元序列,包含空序列""
及null
。 ASF會將空序列與null
值視為相同,因此您可以依據您的偏好選擇使用哪個(我們永遠建議使用null
)。
範例:"SteamLogin": null
、"SteamLogin": ""
、"SteamLogin": "MyAccountName"
Guid?
⸺可為空值的UUID型別,在JSON中被編碼成字串。 UUID由32位元十六進位字元所組成,範圍為0
至9
及a
至f
。 ASF接受各種有效格式⸺小寫字母、大寫字母、是否有連字號皆可。 除了有效的UUID外,本屬性可為空值。也接受特殊值null
,用於代表未提供UUID。
範例:"LicenseID": null
、"LicenseID": "f6a0529813f74d119982eb4fe43a9a24"
ImmutableList<valueType>
⸺給定valueType
值的不可變集合(串列)。 在JSON中,它被定義為給定valueType
的元素陣列。 ASF使用List
來代表指定的屬性支援多個數值,且可能為有序的。
ImmutableList<byte>
的範例:"FarmingOrders": [15, 11, 7]
ImmutableHashSet<valueType>
⸺給定valueType
唯一值的不可變集合(集合)。 在JSON中,它被定義為給定valueType
的元素陣列。 ASF使用HashSet
來代表指定的屬性需為唯一值,且為無序的,因此它會在剖析的時候忽略所有重複值(若您因故提供了重複值)。
ImmutableHashSet<byte>
的範例:"Blacklist": [267420, 303700, 335590]
ImmutableDictionary<keyType, valueType>
⸺將keyType
中指定的唯一鍵映射至valueType
值的不可變字典(映射表)。 在JSON中,它被定義為具有鍵-值對的物件。 請注意,在這種情形下keyType
需要被括住,即使它是例如ulong
的實值型別。 還有一個嚴格要求為映射中的鍵須為唯一,這也是由JSON所強制的。
ImmutableDictionary<ulong, byte>
的範例:"SteamUserPermissions": { "76561198174813138": 3, "76561198174813137": 1 }
flags
⸺旗標屬性透過位元運算,將數個不同的屬性組合成一個最終值。 這使您能夠同時選擇各種不同的允許值,來使用任意一種組合。 最終值由所有啟用選項的值加總而得。
舉例來說,給定下列值:
值 | 名稱 |
---|---|
0 | None |
1 | A |
2 | B |
4 | C |
使用B + C
會產生6
的值,A + C
會產生5
,而使用C
會產生4
,依此類推。 這使您能夠使用不同的值,來建立任意組合的啟用選項⸺若您決定啟用所有選項,只需計算None + A + B + C
,得到7
的值。 還須注意,依據定義值為0
的旗標會在所有可用組合中啟用,因此這個旗標通常代表不啟用任何功能(例如None
)。
如您所見,上述範例中我們有3個可用旗標(A
、B
、C
)來啟用/停用,共有8
種可能的組合值:
None -> 0
A -> 1
B -> 2
A + B -> 3
C -> 4
A + C -> 5
A + C -> 5
A + B + C -> 7
範例:"SteamProtocols": 7
由於JavaScript的限制,網頁設定檔生成器無法將簡單的ulong
欄位正確地串聯化成JSON,因此ulong
欄位會在設定檔中以s_
為前綴的字串呈現。 舉例來說,設定檔生成器會將"SteamOwnerID": 76561198006963719
寫入成"s_SteamOwnerID": "76561198006963719"
。 ASF擁有正確的邏輯來自動處理這類字串的映射,所以您設定檔中的s_
項目是正確生成且有效的。 若您自行生成設定檔,我們建議盡可能保持使用原始的ulong
欄位,但如果您無法這樣做,您也可以遵循本方案,將它編碼成名稱帶有s_
前綴的字串。 我們希望未來能夠解決這個JavaScript限制。
維持與舊版的設定檔相容,是ASF的首要任務。 正如您應該已經知道,遺失設定屬性的處理方式,相當於以它們的預設值來定義它們。 因此,若在新版的ASF中有加入新的設定屬性,您的所有設定檔仍會與新版本維持相容,ASF會將這些新的設定屬性視為使用預設值。 您隨時能依您的需要,增加、移除或編輯任何設定屬性。
我們建議您只定義您想修改的設定屬性,因為這樣您可以使其他屬性自動繼承預設值,這不只能使您的設定檔保持簡潔,也能在我們決定修改屬性預設值時維持相容性,使您不用手動修改(例如我們修改過WebLimiterDelay
的預設值)。
由於上述情形,ASF會自動重新格式化並刪除具有預設值的欄位,來遷移/最佳化您的設定檔。 若您有特殊原因,例如您想提供唯讀的設定檔,不讓ASF來修改它們,可以使用--no-config-migrate
命令列引數來停用這個行為。
ASF可以「動態」修改設定⸺因此ASF能自動:
- 在您建立設定檔時,建立新的Bot實例(並在需要時啟動)
- 在您刪除設定檔時,(並在需要時)停止並移除舊的Bot實例
- 在您編輯設定檔時,停止任何Bot實例(並在需要時重啟)
- 在您重新命名設定檔時,(並在需要時)以新的名稱重新啟動Bot
上述所有行為都是透明的,不需要重新啟動程式或其他(未受影響的)Bot實例,即可自動完成。
此外,若您修改了ASF的核心ASF.json
設定檔,ASF也會重新啟動自身(如果AutoRestart
屬性允許)。 同理,程式會在您刪除或重新命名時自動退出。
若您有特殊原因,例如您不想讓ASF對config
資料夾的改動做出反應,可以使用--no-config-watch
命令列引數來停用這個行為。