Compare commits

..

17 Commits

Author SHA1 Message Date
JustArchi
fe359058cb Translation updates 2017-03-21 14:32:03 +01:00
JustArchi
39e7f5e60e Packages update 2017-03-21 14:28:05 +01:00
JustArchi
6013d15384 Fix too short waiting for ISteamUserAuth initialization 2017-03-21 14:21:11 +01:00
JustArchi
df65f4789b Fix [unassigned] issue 2017-03-21 14:19:44 +01:00
JustArchi
20a9121c9b Misc 2017-03-21 00:46:10 +01:00
JustArchi
726d94b0db Add !nickname 2017-03-20 22:52:16 +01:00
JustArchi
07b84d8452 Increase statistics defaults 2017-03-20 17:21:56 +01:00
JustArchi
df4792ba85 crowdin-cli 2.0.12 2017-03-19 22:03:19 +01:00
JustArchi
4e98ed076e Translation updates 2017-03-19 22:02:08 +01:00
JustArchi
734305263d Further statistics-related improvements 2017-03-19 21:56:36 +01:00
JustArchi
dedc79f9d2 README update 2017-03-18 02:10:17 +01:00
JustArchi
7e96b3256d README update 2017-03-18 02:08:38 +01:00
JustArchi
05269882fe README update 2017-03-18 02:07:57 +01:00
JustArchi
cab97111af README update 2017-03-18 02:05:45 +01:00
JustArchi
a494f10bd5 Bump 2017-03-16 10:05:38 +01:00
JustArchi
bac1bc6903 Closes #502 2017-03-16 10:04:49 +01:00
JustArchi
956c6b4eb2 Bump 2017-03-16 08:12:43 +01:00
51 changed files with 1428 additions and 1248 deletions

View File

@@ -80,7 +80,7 @@
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.1-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.10.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Nito.AsyncEx.4.0.1\lib\net45\Nito.AsyncEx.dll</HintPath>

View File

@@ -828,8 +828,6 @@ namespace ArchiSteamFarm {
return false;
}
SteamID = steamID;
string sessionID = Convert.ToBase64String(Encoding.UTF8.GetBytes(steamID.ToString()));
// Generate an AES session key
@@ -904,6 +902,7 @@ namespace ArchiSteamFarm {
}
}
SteamID = steamID;
LastSessionRefreshCheck = DateTime.UtcNow;
return true;
}
@@ -951,7 +950,11 @@ namespace ArchiSteamFarm {
return await WebBrowser.UrlHeadRetry(request).ConfigureAwait(false);
}
internal void OnDisconnected() => SteamID = 0;
internal void OnDisconnected() {
CachedPublicInventory = null;
CachedSteamApiKey = null;
SteamID = 0;
}
internal async Task<EPurchaseResultDetail> RedeemWalletKey(string key) {
if (string.IsNullOrEmpty(key)) {

View File

@@ -575,6 +575,14 @@ namespace ArchiSteamFarm {
return false;
}
internal void RequestPersonaStateUpdate() {
if (!IsConnectedAndLoggedOn) {
return;
}
SteamFriends.RequestFriendInfo(SteamID, EClientPersonaStateFlag.PlayerName | EClientPersonaStateFlag.Presence);
}
internal async Task<string> Response(ulong steamID, string message) {
if ((steamID == 0) || string.IsNullOrEmpty(message)) {
ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message));
@@ -664,6 +672,12 @@ namespace ArchiSteamFarm {
return await ResponseLoot(steamID, args[1]).ConfigureAwait(false);
case "!LOOT^":
return await ResponseLootSwitch(steamID, args[1]).ConfigureAwait(false);
case "!NICKNAME":
if (args.Length > 2) {
return await ResponseNickname(steamID, args[1], args[2]).ConfigureAwait(false);
}
return await ResponseNickname(steamID, args[1]).ConfigureAwait(false);
case "!OA":
return await ResponseOwns(steamID, SharedInfo.ASF, args[1]).ConfigureAwait(false);
case "!OWNS":
@@ -1175,14 +1189,34 @@ namespace ArchiSteamFarm {
}).Forget();
}
private void OnAccountInfo(SteamUser.AccountInfoCallback callback) {
private async void OnAccountInfo(SteamUser.AccountInfoCallback callback) {
if (callback == null) {
ArchiLogger.LogNullError(nameof(callback));
return;
}
if (!BotConfig.FarmOffline) {
SteamFriends.SetPersonaState(EPersonaState.Online);
if (BotConfig.FarmOffline) {
return;
}
// We can't use SetPersonaState() before SK2 in fact registers our nickname
// This is pretty rare, but SK2 SteamFriends handler and this handler execute at the same time
// So we wait for nickname to be registered (with timeout of 5 tries/seconds)
string nickname = SteamFriends.GetPersonaName();
for (byte i = 0; (i < WebBrowser.MaxRetries) && (string.IsNullOrEmpty(nickname) || nickname.Equals("[unassigned]")); i++) {
await Task.Delay(1000).ConfigureAwait(false);
nickname = SteamFriends.GetPersonaName();
}
if (string.IsNullOrEmpty(nickname) || nickname.Equals("[unassigned]")) {
ArchiLogger.LogGenericError(string.Format(Strings.ErrorObjectIsNull, nameof(nickname)));
return;
}
try {
await SteamFriends.SetPersonaState(EPersonaState.Online);
} catch (Exception e) {
ArchiLogger.LogGenericException(e);
}
}
@@ -1604,7 +1638,7 @@ namespace ArchiSteamFarm {
}
// Sometimes Steam won't send us our own PersonaStateCallback, so request it explicitly
SteamFriends.RequestFriendInfo(callback.ClientSteamID, EClientPersonaStateFlag.PlayerName | EClientPersonaStateFlag.Presence);
RequestPersonaStateUpdate();
InitializeFamilySharing().Forget();
@@ -2220,6 +2254,10 @@ namespace ArchiSteamFarm {
return FormatBotResponse(Strings.BotLootingTemporarilyDisabled);
}
if (BotConfig.LootableTypes.Count == 0) {
return FormatBotResponse(Strings.BotLootingNoLootableTypes);
}
ulong targetSteamMasterID = GetFirstSteamMasterID();
if (targetSteamMasterID == 0) {
return FormatBotResponse(Strings.BotLootingMasterNotDefined);
@@ -2229,10 +2267,6 @@ namespace ArchiSteamFarm {
return FormatBotResponse(Strings.BotLootingYourself);
}
if (BotConfig.LootableTypes.Count == 0) {
return FormatBotResponse(Strings.BotLootingNoLootableTypes);
}
await Trading.LimitInventoryRequestsAsync().ConfigureAwait(false);
HashSet<Steam.Item> inventory = await ArchiWebHandler.GetMySteamInventory(true, BotConfig.LootableTypes).ConfigureAwait(false);
@@ -2329,6 +2363,67 @@ namespace ArchiSteamFarm {
return responses.Count > 0 ? string.Join("", responses) : null;
}
private async Task<string> ResponseNickname(ulong steamID, string nickname) {
if ((steamID == 0) || string.IsNullOrEmpty(nickname)) {
ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(nickname));
return null;
}
if (!IsMaster(steamID)) {
return null;
}
if (!IsConnectedAndLoggedOn) {
return FormatBotResponse(Strings.BotNotConnected);
}
SteamFriends.PersonaChangeCallback result;
try {
result = await SteamFriends.SetPersonaName(nickname);
} catch (Exception e) {
ArchiLogger.LogGenericException(e);
return FormatBotResponse(Strings.WarningFailed);
}
if ((result == null) || (result.Result != EResult.OK)) {
return FormatBotResponse(Strings.WarningFailed);
}
return FormatBotResponse(Strings.Done);
}
private static async Task<string> ResponseNickname(ulong steamID, string botNames, string nickname) {
if ((steamID == 0) || string.IsNullOrEmpty(botNames) || string.IsNullOrEmpty(nickname)) {
ASF.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(botNames) + " || " + nameof(nickname));
return null;
}
HashSet<Bot> bots = GetBots(botNames);
if ((bots == null) || (bots.Count == 0)) {
return IsOwner(steamID) ? FormatStaticResponse(string.Format(Strings.BotNotFound, botNames)) : null;
}
ICollection<string> results;
IEnumerable<Task<string>> tasks = bots.Select(bot => bot.ResponseNickname(steamID, nickname));
switch (Program.GlobalConfig.OptimizationMode) {
case GlobalConfig.EOptimizationMode.MinMemoryUsage:
results = new List<string>(bots.Count);
foreach (Task<string> task in tasks) {
results.Add(await task.ConfigureAwait(false));
}
break;
default:
results = await Task.WhenAll(tasks).ConfigureAwait(false);
break;
}
List<string> responses = new List<string>(results.Where(result => !string.IsNullOrEmpty(result)));
return responses.Count > 0 ? string.Join("", responses) : null;
}
private async Task<string> ResponseOwns(ulong steamID, string query) {
if ((steamID == 0) || string.IsNullOrEmpty(query)) {
ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(query));
@@ -2508,7 +2603,7 @@ namespace ArchiSteamFarm {
}
ICollection<string> results;
IEnumerable<Task<string>> tasks = bots.Select(bot => Task.Run(() => bot.ResponsePause(steamID, sticky)));
IEnumerable<Task<string>> tasks = bots.Select(bot => bot.ResponsePause(steamID, sticky));
switch (Program.GlobalConfig.OptimizationMode) {
case GlobalConfig.EOptimizationMode.MinMemoryUsage:

View File

@@ -119,7 +119,7 @@ namespace ArchiSteamFarm {
// This call verifies if JSON is alright
// We don't wrap it in try catch as it should always be the case
// And if it's not, we want to know about it (in a crash) and correct it in future version
JsonConvert.DeserializeObject<GlobalDatabase>(json);
JsonConvert.DeserializeObject<GlobalDatabase>(json, CustomSerializerSettings);
lock (FileLock) {
for (byte i = 0; i < 5; i++) {

View File

@@ -539,7 +539,9 @@
<value>Ботът не работи.</value>
</data>
<data name="BotStatusPlayingNotAvailable" xml:space="preserve">
<value>В момента се ползва бот.</value>
</data>
<data name="BotUnableToConnect" xml:space="preserve">
<value>Не може да се свърже със Steam: {0}</value>
<comment>{0} will be replaced by failure reason (string)</comment>
@@ -592,7 +594,9 @@
</data>
<data name="ErrorFunctionOnlyInHeadlessMode" xml:space="preserve">
<value>Тази функция е възможна само в headless режим!</value>
</data>
<data name="BotOwnedAlready" xml:space="preserve">
<value>Вече се притежава: {0}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>

View File

@@ -548,7 +548,9 @@ StackTrace:
<data name="BotLootingFailed" xml:space="preserve">
<value>Vytvoření obchodní nabídky selhalo.</value>
</data>
<data name="BotLootingMasterNotDefined" xml:space="preserve">
<value>Obchod nemohl být odeslán protože není nastaven žádný účet s master permission.</value>
</data>
<data name="BotLootingNoLootableTypes" xml:space="preserve">
<value>Zatím nemáte nastavené žádné typy pro zasílání.</value>
</data>
@@ -711,5 +713,7 @@ StackTrace:
<value>Již je ve vlastnictví: {0}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="ErrorAccessDenied" xml:space="preserve">
<value>Přístup zamítnut.</value>
</data>
</root>

View File

@@ -199,9 +199,16 @@
<data name="TimeSpanMinute" xml:space="preserve">
<value>1 मिनट</value>
</data>
<data name="TimeSpanMinutes" xml:space="preserve">
<value>{0} मिनट</value>
<comment>{0} will be replaced by number of minutes</comment>
</data>
<data name="TimeSpanSecond" xml:space="preserve">
<value>1 सेकंड</value>
</data>

View File

@@ -611,9 +611,7 @@
<data name="BotStatusNotRunning" xml:space="preserve">
<value>Bot tidak berjalan.</value>
</data>
<data name="BotStatusPaused" xml:space="preserve">
<value>Bot {0} di-pause atau berjalan dalam mode manual.</value>
</data>
<data name="BotStatusPlayingNotAvailable" xml:space="preserve">
<value>Bot saat ini sedang digunakan.</value>
</data>

View File

@@ -122,7 +122,7 @@
<comment>{0} will be replaced by trade number</comment>
</data>
<data name="AutoUpdateCheckInfo" xml:space="preserve">
<value>ASF controleert automatisch om de {0} uren op een nieuwe versie.</value>
<value>ASF controleert automatisch iedere {0} uur voor een nieuwe versie.</value>
<comment>{0} will be replaced by number of hours</comment>
</data>
<data name="Content" xml:space="preserve">
@@ -134,7 +134,7 @@
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by invalid value</comment>
</data>
<data name="ErrorEarlyFatalExceptionInfo" xml:space="preserve">
<value>ASF V{0} heeft een fatale uitzonderingsfout veroorzaakt voordat het hoofd logboekmodule in staat was om te initialiseren!</value>
<value>ASF V{0} is een fatale uitzonderingsfout tegengekomen voordat het hoofd logboekmodule in staat was om te initialiseren!</value>
<comment>{0} will be replaced by version number</comment>
</data>
<data name="ErrorEarlyFatalExceptionPrint" xml:space="preserve">
@@ -147,7 +147,7 @@ StackTrace:
<value>Afsluiten met een nonzero foutcode!</value>
</data>
<data name="ErrorFailingRequest" xml:space="preserve">
<value>Vezoek mislukt: {0}</value>
<value>Verzoek mislukt: {0}</value>
<comment>{0} will be replaced by URL of the request</comment>
</data>
<data name="ErrorGlobalConfigNotLoaded" xml:space="preserve">
@@ -184,10 +184,10 @@ StackTrace:
<value>Controle voor de laatste versie is mislukt!</value>
</data>
<data name="ErrorUpdateNoAssetForThisBinary" xml:space="preserve">
<value>Kon niet verdergaan met updaten, omdat er geen bestand verwijst naar de momenteel draaiende versie! Zorg ervoor dat je ASF bestand de correcte naam heeft!</value>
<value>Kon niet verdergaan met updaten, omdat er geen bestand verwijst naar de momenteel draaiende versie! Zorg ervoor dat je ASF-bestand de correcte naam heeft!</value>
</data>
<data name="ErrorUpdateNoAssets" xml:space="preserve">
<value>Kon niet verdergaan met de update omdat deze versie niet alle bestanden omvat!</value>
<value>Kon niet verdergaan met updaten omdat deze updateversie geen bestanden bevat!</value>
</data>
<data name="ErrorUserInputRunningInHeadlessMode" xml:space="preserve">
<value>Aanvraag voor gebruikersinvoer ontvangen, maar het proces draait in de headless mode!</value>
@@ -248,7 +248,7 @@ StackTrace:
<value>Starten...</value>
</data>
<data name="StatusCode" xml:space="preserve">
<value>Status code: {0}</value>
<value>Statuscode: {0}</value>
<comment>{0} will be replaced by status code number/name</comment>
</data>
<data name="Success" xml:space="preserve">
@@ -292,7 +292,7 @@ StackTrace:
<value>Nieuwe versie wordt gedownload... Als je het gedane werk waardeert, overweeg dan tijdens het wachten om te doneren! :)</value>
</data>
<data name="UpdateFinished" xml:space="preserve">
<value>Bijwerken afgerond!</value>
<value>Update is afgerond!</value>
</data>
<data name="UpdateNewVersionAvailable" xml:space="preserve">
<value>Een nieuwe ASF-versie is beschikbaar! Overweeg om deze zelf bij te werken!</value>
@@ -339,7 +339,7 @@ StackTrace:
<comment>{0} will be replaced by object's name, {1} will be replaced by value for that object</comment>
</data>
<data name="WarningTooManyGamesToPlay" xml:space="preserve">
<value>Het gelijktijdig spelen van meer dan {0} spellen is niet mogelijk, alleen de eerste {0} spellen van {1} worden gebruikt!</value>
<value>Het gelijktijdig spelen van meer dan {0} spellen is niet mogelijk, alleen de eerste {0} spellen van {1} worden gespeeld!</value>
<comment>{0} will be replaced by max number of games, {1} will be replaced by name of the configuration property</comment>
</data>
<data name="WarningWCFIgnoringCommand" xml:space="preserve">
@@ -350,7 +350,7 @@ StackTrace:
<value>WCF service kan niet worden gestart vanwege de AddressAccessDeniedException! Als je gebruik wilt maken van de WCF service van ASF, start ASF als administrator of geef de juiste machtigingen!</value>
</data>
<data name="WCFAnswered" xml:space="preserve">
<value>Beantwoordt aan WCF opdracht: {0} met: {1}</value>
<value>Gereageerd op WCF opdracht: {0} met: {1}</value>
<comment>{0} will be replaced by WCF command, {1} will be replaced by WCF answer</comment>
</data>
<data name="WCFReady" xml:space="preserve">
@@ -420,7 +420,7 @@ StackTrace:
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to idle</comment>
</data>
<data name="IdlingStopped" xml:space="preserve">
<value>Het idlen is gestopt!</value>
<value>Het farmen is gestopt!</value>
</data>
<data name="IgnoredStickyPauseEnabled" xml:space="preserve">
<value>Dit verzoek wordt genegeerd. Permanente pauze staat aan!</value>
@@ -429,30 +429,30 @@ StackTrace:
<value>We hebben niets om te farmen op dit account!</value>
</data>
<data name="NowIdling" xml:space="preserve">
<value>Nu aan het idlen: {0} ({1})</value>
<value>Nu aan het farmen: {0} ({1})</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="NowIdlingList" xml:space="preserve">
<value>Nu aan het idlen: {0}</value>
<value>Nu aan het farmen: {0}</value>
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
</data>
<data name="PlayingNotAvailable" xml:space="preserve">
<value>Spelen is op dit moment niet mogelijk, we proberen het later nog een keer!</value>
</data>
<data name="StillIdling" xml:space="preserve">
<value>Nog steeds aan het idlen: {0} ({1})</value>
<value>Nog steeds aan het farmen: {0} ({1})</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="StillIdlingList" xml:space="preserve">
<value>Nog steeds aan het idlen: {0}</value>
<value>Nog steeds aan het farmen: {0}</value>
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
</data>
<data name="StoppedIdling" xml:space="preserve">
<value>Gestopt met idlen: {0} ({1})</value>
<value>Gestopt met farmen: {0} ({1})</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="StoppedIdlingList" xml:space="preserve">
<value>Gestopt met idlen: {0}</value>
<value>Gestopt met farmen: {0}</value>
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
</data>
<data name="UnknownCommand" xml:space="preserve">
@@ -462,7 +462,7 @@ StackTrace:
<value>Kon badge informatie niet verkrijgen, we zullen het later opnieuw proberen!</value>
</data>
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
<value>Kaart status kon niet worden gecontroleerd voor {0} ({1}), wij zullen het later nogmaals proberen!</value>
<value>Kaart-status kon niet worden gecontroleerd voor {0} ({1}), we proberen het later opnieuw!</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotAcceptingGift" xml:space="preserve">
@@ -493,7 +493,7 @@ StackTrace:
<value>Je DeviceID is incorrect of bestaat niet!</value>
</data>
<data name="BotAuthenticatorToken" xml:space="preserve">
<value>2FA Token: {0}</value>
<value>2FA Code: {0}</value>
<comment>{0} will be replaced by generated 2FA token (string)</comment>
</data>
<data name="BotAutomaticIdlingNowPaused" xml:space="preserve">
@@ -526,7 +526,7 @@ StackTrace:
<comment>{0} will be replaced by password encryption method (string), {1} will be replaced by encrypted password using that method (string)</comment>
</data>
<data name="BotInstanceNotStartingBecauseDisabled" xml:space="preserve">
<value>Deze bot wordt niet gestart omdat hij uitgeschakeld is in het configuratie bestand!</value>
<value>Deze bot wordt niet gestart omdat hij uitgeschakeld is in het configuratiebestand!</value>
</data>
<data name="BotInvalidAuthenticatorDuringLogin" xml:space="preserve">
<value>TwoFactorCodeMisMatch foutmelding {0} keer ontvangen. Dit betekent meestal de verkeerde ASF 2FA login informatie, afbreken!</value>
@@ -546,7 +546,7 @@ StackTrace:
<value>Dit account wordt waarschijnlijk al gebruikt door een andere ASF instantie, wat wordt gezien als ongedefinieerd gedrag. Weigeren om het draaiende te houden!</value>
</data>
<data name="BotLootingFailed" xml:space="preserve">
<value>Handelsvoorstel mislukt!</value>
<value>Ruilaanbod mislukt!</value>
</data>
<data name="BotLootingMasterNotDefined" xml:space="preserve">
<value>Ruilaanbod kon niet verzonden worden omdat er geen gebruiker is toegewezen met master permissies!</value>
@@ -561,7 +561,7 @@ StackTrace:
<value>Looting is nu ingeschakeld!</value>
</data>
<data name="BotLootingSuccess" xml:space="preserve">
<value>Trade verzoek succesvol verzonden!</value>
<value>Ruilaanbod succesvol verzonden!</value>
</data>
<data name="BotLootingTemporarilyDisabled" xml:space="preserve">
<value>Looting is tijdelijk uitgeschakeld!</value>
@@ -570,7 +570,7 @@ StackTrace:
<value>Je kan jezelf niet looten!</value>
</data>
<data name="BotNoASFAuthenticator" xml:space="preserve">
<value>Deze bot heeft ASF 2FA nog niet ingeschakeld! Ben je vergeten om je authenticator te importeren als ASF 2FA?</value>
<value>Deze bot heeft ASF 2FA nog niet ingeschakeld! Ben je vergeten om je authenticator als ASF 2FA te importeren?</value>
</data>
<data name="BotNotConnected" xml:space="preserve">
<value>Deze bot is niet verbonden!</value>
@@ -584,7 +584,7 @@ StackTrace:
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Aanvraaglimiet overschreden, we zullen het over {0} minuten opnieuw proberen...</value>
<value>Aanvraaglimiet overschreden; we zullen het over {0} minuten opnieuw proberen...</value>
<comment>{0} will be replaced by number of minutes</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
@@ -655,7 +655,7 @@ StackTrace:
<value>Verbinden...</value>
</data>
<data name="BotHeartBeatFailed" xml:space="preserve">
<value>Verbinding verbreken met de client is mislukt. Bot instantie wordt opgegeven!</value>
<value>Verbinding verbreken met de client is mislukt. Bot instantie wordt afgebroken!</value>
</data>
<data name="BotSteamDirectoryInitializationFailed" xml:space="preserve">
<value>Kon SteamDirectory niet initialiseren: verbinden met Steam netwerk gaat mogelijk veel langer duren dan gebruikelijk!</value>
@@ -668,7 +668,7 @@ StackTrace:
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorDatabaseInvalid" xml:space="preserve">
<value>Blijvende database kan niet worden geladen, als het probleem aanhoudt, verwijder dan {0} om de database opnieuw te maken!</value>
<value>Huidige database kon niet worden geladen. Als het probleem aanhoudt, verwijder dan {0} om de database opnieuw aan te maken!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="Initializing" xml:space="preserve">
@@ -676,7 +676,7 @@ StackTrace:
<comment>{0} will be replaced by service name that is being initialized</comment>
</data>
<data name="WarningPrivacyPolicy" xml:space="preserve">
<value>Raadpleeg onze privacy beleid op de ASF Wiki als je bezorgd bent over wat ASF in feite doet!</value>
<value>Bij twijfel of onduidelijkheid, raadpleeg ons privacybeleid op de ASF Wiki om meer te weten te komen wat ASF precies doet!</value>
</data>
<data name="Welcome" xml:space="preserve">
<value>Het lijkt erop dat je het programma voor het eerst opstart, welkom!</value>

View File

@@ -134,7 +134,7 @@
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by invalid value</comment>
</data>
<data name="ErrorEarlyFatalExceptionInfo" xml:space="preserve">
<value>ASF V{0} heeft een fatale uitzonderingsfout veroorzaakt voordat het hoofd logboekmodule in staat was om te initialiseren!</value>
<value>ASF V{0} is een fatale uitzonderingsfout tegengekomen voordat het hoofd logboekmodule in staat was om te initialiseren!</value>
<comment>{0} will be replaced by version number</comment>
</data>
<data name="ErrorEarlyFatalExceptionPrint" xml:space="preserve">
@@ -184,7 +184,7 @@ StackTrace:
<value>Controle voor de laatste versie is mislukt!</value>
</data>
<data name="ErrorUpdateNoAssetForThisBinary" xml:space="preserve">
<value>Kon niet verdergaan met updaten, omdat er geen bestand verwijst naar de momenteel draaiende versie! Zorg ervoor dat je ASF bestand de correcte naam heeft!</value>
<value>Kon niet verdergaan met updaten, omdat er geen bestand verwijst naar de momenteel draaiende versie! Zorg ervoor dat je ASF-bestand de correcte naam heeft!</value>
</data>
<data name="ErrorUpdateNoAssets" xml:space="preserve">
<value>Kon niet verdergaan met updaten omdat deze updateversie geen bestanden bevat!</value>
@@ -292,7 +292,7 @@ StackTrace:
<value>Nieuwe versie wordt gedownload... Als je het gedane werk waardeert, overweeg dan tijdens het wachten om te doneren! :)</value>
</data>
<data name="UpdateFinished" xml:space="preserve">
<value>Bijwerken afgerond!</value>
<value>Update is afgerond!</value>
</data>
<data name="UpdateNewVersionAvailable" xml:space="preserve">
<value>Nieuwe ASF versie beschikbaar! Overweeg om handmatig bij te werken!</value>
@@ -339,18 +339,18 @@ StackTrace:
<comment>{0} will be replaced by object's name, {1} will be replaced by value for that object</comment>
</data>
<data name="WarningTooManyGamesToPlay" xml:space="preserve">
<value>Het gelijktijdig spelen van meer dan {0} spellen is niet mogelijk, alleen de eerste {0} spellen van {1} worden gebruikt!</value>
<value>Het gelijktijdig spelen van meer dan {0} spellen is niet mogelijk, alleen de eerste {0} spellen van {1} worden gespeeld!</value>
<comment>{0} will be replaced by max number of games, {1} will be replaced by name of the configuration property</comment>
</data>
<data name="WarningWCFIgnoringCommand" xml:space="preserve">
<value>WCF opdracht negeren omdat --client was niet gespecificeerd: {0}</value>
<value>WCF opdracht negeren omdat --client niet was gespecificeerd: {0}</value>
<comment>{0} will be replaced by WCF command</comment>
</data>
<data name="ErrorWCFAddressAccessDeniedException" xml:space="preserve">
<value>WCF service kan niet worden gestart vanwege de AddressAccessDeniedException! Als je gebruik wilt maken van de WCF service van ASF, start ASF als administrator of geef de juiste machtigingen!</value>
</data>
<data name="WCFAnswered" xml:space="preserve">
<value>Beantwoordt aan WCF opdracht: {0} met: {1}</value>
<value>Gereageerd op WCF opdracht: {0} met: {1}</value>
<comment>{0} will be replaced by WCF command, {1} will be replaced by WCF answer</comment>
</data>
<data name="WCFReady" xml:space="preserve">
@@ -462,7 +462,7 @@ StackTrace:
<value>Kon badge informatie niet verkrijgen, we zullen het later opnieuw proberen!</value>
</data>
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
<value>Kaart status kon niet worden gecontroleerd voor {0} ({1}), wij zullen het later nogmaals proberen!</value>
<value>Kaart-status kon niet worden gecontroleerd voor {0} ({1}), we proberen het later opnieuw!</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotAcceptingGift" xml:space="preserve">
@@ -561,7 +561,7 @@ StackTrace:
<value>Looting is nu ingeschakeld!</value>
</data>
<data name="BotLootingSuccess" xml:space="preserve">
<value>Ruilaanbod verzonden!</value>
<value>Ruilaanbod succesvol verzonden!</value>
</data>
<data name="BotLootingTemporarilyDisabled" xml:space="preserve">
<value>Looting is tijdelijk uitgeschakeld!</value>
@@ -570,7 +570,7 @@ StackTrace:
<value>Je kan jezelf niet looten!</value>
</data>
<data name="BotNoASFAuthenticator" xml:space="preserve">
<value>Deze bot heeft ASF 2FA nog niet ingeschakeld! Ben je vergeten om je authenticator te importeren als ASF 2FA?</value>
<value>Deze bot heeft ASF 2FA nog niet ingeschakeld! Ben je vergeten om je authenticator als ASF 2FA te importeren?</value>
</data>
<data name="BotNotConnected" xml:space="preserve">
<value>Deze bot is niet verbonden!</value>
@@ -584,7 +584,7 @@ StackTrace:
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Aanvraaglimiet overschreden, we zullen het over {0} minuten opnieuw proberen...</value>
<value>Aanvraaglimiet overschreden; we zullen het over {0} minuten opnieuw proberen...</value>
<comment>{0} will be replaced by number of minutes</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
@@ -668,7 +668,7 @@ StackTrace:
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorDatabaseInvalid" xml:space="preserve">
<value>Database kon niet worden geladen. Als het probleem aanhoudt, verwijder dan {0} om de database opnieuw aan te maken!</value>
<value>Huidige database kon niet worden geladen. Als het probleem aanhoudt, verwijder dan {0} om de database opnieuw aan te maken!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="Initializing" xml:space="preserve">

View File

@@ -290,7 +290,7 @@ StackTrace:
<value>Wyszukiwanie nowej wersji...</value>
</data>
<data name="UpdateDownloadingNewVersion" xml:space="preserve">
<value>Pobieranie nowej wersji.. Podczas czekania rozważ dotację, jeśli doceniasz naszą pracę! :)</value>
<value>Pobieranie nowej wersji... Podczas czekania rozważ dotację, jeśli doceniasz naszą pracę! :)</value>
</data>
<data name="UpdateFinished" xml:space="preserve">
<value>Aktualizacja została zakończona!</value>

View File

@@ -711,5 +711,7 @@ StackTrace:
<value>Deținute deja: {0}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="ErrorAccessDenied" xml:space="preserve">
<value>Acces interzis!</value>
</data>
</root>

View File

@@ -152,7 +152,7 @@
<comment>{0} will be replaced by URL of the request</comment>
</data>
<data name="ErrorGlobalConfigNotLoaded" xml:space="preserve">
<value>Глобальная конфигурация не может быть загружена. Убедитесь, что {0} существует и верен! Если не понимаете что делать - прочитайте статью "setting up" в wiki.</value>
<value>Невозможно загрузить файл глобальной конфигурации. Убедитесь, что {0} существует и верен! Если не понимаете что делать - прочтите статью "setting up" в wiki.</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorIsInvalid" xml:space="preserve">
@@ -191,7 +191,7 @@
<value>Не могу обновиться, поскольку эта версия не содержит никаких файлов!</value>
</data>
<data name="ErrorUserInputRunningInHeadlessMode" xml:space="preserve">
<value>Получен запрос на ввод данных пользователем, однако процесс идёт в режиме игнорирования!</value>
<value>Получен запрос на ввод данных пользователем, однако процесс идёт в безынтерфейсном режиме!</value>
</data>
<data name="ErrorWCFAccessDenied" xml:space="preserve">
<value>Отказ от обработки запроса, поскольку SteamOwnerID не задан!</value>
@@ -204,10 +204,10 @@
<value>Не удалось!</value>
</data>
<data name="GlobalConfigChanged" xml:space="preserve">
<value>Файл глобальных настроек был изменен!</value>
<value>Файл глобальной конфигурации был изменен!</value>
</data>
<data name="ErrorGlobalConfigRemoved" xml:space="preserve">
<value>Файл глобальных настроек был удален!</value>
<value>Файл глобальной конфигурации был удален!</value>
</data>
<data name="IgnoringTrade" xml:space="preserve">
<value>Игнорирование обмена: {0}</value>
@@ -526,10 +526,10 @@
<comment>{0} will be replaced by password encryption method (string), {1} will be replaced by encrypted password using that method (string)</comment>
</data>
<data name="BotInstanceNotStartingBecauseDisabled" xml:space="preserve">
<value>Не запускаем этого бота, поскольку он отключён в файле настроек!</value>
<value>Не запускаем этого бота, поскольку он отключён в конфигурационном файле!</value>
</data>
<data name="BotInvalidAuthenticatorDuringLogin" xml:space="preserve">
<value>TwoFactorCodeMismatch (Неправильный код 2FA) получен {0} раз подряд, это почти всегда означает неверные изначальные данные ASF 2FA, отменяем вход!</value>
<value>TwoFactorCodeMismatch (Неправильный код 2FA) получен {0} раз подряд, это почти всегда означает неверную настройку ASF 2FA, прекращаем работу!</value>
<comment>{0} will be replaced by maximum allowed number of failed 2FA attempts</comment>
</data>
<data name="BotLoggedOff" xml:space="preserve">
@@ -552,22 +552,22 @@
<value>Невозможно отправить обмен, потому что не задано пользователя с правами "master"!</value>
</data>
<data name="BotLootingNoLootableTypes" xml:space="preserve">
<value>У вас не указаны типы вещей для лута!</value>
<value>У вас не указаны типы лута для сбора!</value>
</data>
<data name="BotLootingNowDisabled" xml:space="preserve">
<value>Лут отключен!</value>
</data>
<data name="BotLootingNowEnabled" xml:space="preserve">
<value>Лут сейчас включен!</value>
<value>Лутинг включен!</value>
</data>
<data name="BotLootingSuccess" xml:space="preserve">
<value>Предложение обмена отправлено!</value>
</data>
<data name="BotLootingTemporarilyDisabled" xml:space="preserve">
<value>Лут временно отключен!</value>
<value>Лутинг временно отключен!</value>
</data>
<data name="BotLootingYourself" xml:space="preserve">
<value>Вы не можете лутать себя!</value>
<value>Нельзя собрать лут с самого себя!</value>
</data>
<data name="BotNoASFAuthenticator" xml:space="preserve">
<value>У этого бота не включён ASF 2FA! Вы не забыли импортировать свой аутентификатор в ASF 2FA?</value>
@@ -668,7 +668,7 @@
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorDatabaseInvalid" xml:space="preserve">
<value>Постоянная база данных не может быть загружена, если проблема сохраняется, то пожалуйста удалите {0}, для пересоздания базы данных!</value>
<value>Не удалось загрузить базу данных, если эта ошибка будет повтораться - пожалуйста, удалите {0} для пересоздания базы данных!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="Initializing" xml:space="preserve">

View File

@@ -548,7 +548,9 @@ Yığın izleme:
<data name="BotLootingFailed" xml:space="preserve">
<value>Takas teklifi başarısız oldu!</value>
</data>
<data name="BotLootingMasterNotDefined" xml:space="preserve">
<value>Takas gönderilemedi çünkü master izniyle tanımlanmış hiçbir kullanıcı yok!</value>
</data>
<data name="BotLootingNoLootableTypes" xml:space="preserve">
<value>Ayarlanan hiç düşürme türünüz yok!</value>
</data>
@@ -711,5 +713,7 @@ Yığın izleme:
<value>Zaten sahip olunan: {0}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="ErrorAccessDenied" xml:space="preserve">
<value>Erişim reddedildi!</value>
</data>
</root>

View File

@@ -44,7 +44,7 @@ namespace ArchiSteamFarm {
internal const string ServiceDescription = "ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.";
internal const string ServiceName = "ArchiSteamFarm";
internal const string StatisticsServer = "asf.justarchi.net";
internal const string VersionNumber = "2.3.0.1";
internal const string VersionNumber = "2.3.0.3";
internal static readonly Version Version = Assembly.GetEntryAssembly().GetName().Version;
}

View File

@@ -24,7 +24,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -33,7 +32,9 @@ using SteamKit2;
namespace ArchiSteamFarm {
internal sealed class Statistics : IDisposable {
private const byte MinAnnouncementCheckTTL = 6; // Minimum amount of hours we must wait before checking eligibility for Announcement, should be lower than MinPersonaStateTTL
private const byte MinHeartBeatTTL = 10; // Minimum amount of minutes we must wait before sending next HeartBeat
private const byte MinPersonaStateTTL = 8; // Minimum amount of hours we must wait before requesting persona state update
private static readonly SemaphoreSlim InitializationSemaphore = new SemaphoreSlim(1);
@@ -41,11 +42,9 @@ namespace ArchiSteamFarm {
private readonly Bot Bot;
private readonly SemaphoreSlim Semaphore = new SemaphoreSlim(1);
private string LastAvatarHash;
private DateTime LastAnnouncementCheck = DateTime.MinValue;
private DateTime LastHeartBeat = DateTime.MinValue;
private bool? LastMatchEverything;
private string LastNickname;
private DateTime LastPersonaStateRequest = DateTime.MinValue;
private bool ShouldSendHeartBeats;
internal Statistics(Bot bot) {
@@ -59,6 +58,12 @@ namespace ArchiSteamFarm {
public void Dispose() => Semaphore.Dispose();
internal async Task OnHeartBeat() {
// Request persona update if needed
if ((DateTime.UtcNow > LastPersonaStateRequest.AddHours(MinPersonaStateTTL)) && (DateTime.UtcNow > LastAnnouncementCheck.AddHours(MinAnnouncementCheckTTL))) {
LastPersonaStateRequest = DateTime.UtcNow;
Bot.RequestPersonaStateUpdate();
}
if (!ShouldSendHeartBeats || (DateTime.UtcNow < LastHeartBeat.AddMinutes(MinHeartBeatTTL))) {
return;
}
@@ -87,15 +92,19 @@ namespace ArchiSteamFarm {
internal async Task OnLoggedOn() => await Bot.ArchiWebHandler.JoinGroup(SharedInfo.ASFGroupSteamID).ConfigureAwait(false);
[SuppressMessage("ReSharper", "FunctionComplexityOverflow")]
internal async Task OnPersonaState(SteamFriends.PersonaStateCallback callback) {
if (callback == null) {
ASF.ArchiLogger.LogNullError(nameof(callback));
return;
}
if (DateTime.UtcNow < LastAnnouncementCheck.AddHours(MinAnnouncementCheckTTL)) {
return;
}
// Don't announce if we don't meet conditions
if (!Bot.HasMobileAuthenticator || !Bot.BotConfig.TradingPreferences.HasFlag(BotConfig.ETradingPreferences.SteamTradeMatcher) || !await Bot.ArchiWebHandler.HasValidApiKey().ConfigureAwait(false) || !await Bot.ArchiWebHandler.HasPublicInventory().ConfigureAwait(false)) {
LastAnnouncementCheck = DateTime.UtcNow;
ShouldSendHeartBeats = false;
return;
}
@@ -112,30 +121,28 @@ namespace ArchiSteamFarm {
bool matchEverything = Bot.BotConfig.TradingPreferences.HasFlag(BotConfig.ETradingPreferences.MatchEverything);
// Skip announcing if we already announced this bot with the same data
if (ShouldSendHeartBeats && (LastNickname != null) && nickname.Equals(LastNickname) && (LastAvatarHash != null) && avatarHash.Equals(LastAvatarHash) && LastMatchEverything.HasValue && (matchEverything == LastMatchEverything.Value)) {
return;
}
await Semaphore.WaitAsync().ConfigureAwait(false);
try {
// Skip announcing if we already announced this bot with the same data
if (ShouldSendHeartBeats && (LastNickname != null) && nickname.Equals(LastNickname) && (LastAvatarHash != null) && avatarHash.Equals(LastAvatarHash) && LastMatchEverything.HasValue && (matchEverything == LastMatchEverything.Value)) {
if (DateTime.UtcNow < LastAnnouncementCheck.AddHours(MinAnnouncementCheckTTL)) {
return;
}
await Trading.LimitInventoryRequestsAsync().ConfigureAwait(false);
HashSet<Steam.Item> inventory = await Bot.ArchiWebHandler.GetMySteamInventory(true, new HashSet<Steam.Item.EType> { Steam.Item.EType.TradingCard }).ConfigureAwait(false);
if ((inventory == null) || (inventory.Count == 0)) {
// Don't announce, we have empty inventory
// This is actually inventory failure, so we'll stop sending heartbeats but not record it as valid check
if (inventory == null) {
ShouldSendHeartBeats = false;
return;
}
// Even if following request fails, we want to send HeartBeats regardless
ShouldSendHeartBeats = true;
// This is inventory indeed being empty
if (inventory.Count == 0) {
LastAnnouncementCheck = DateTime.UtcNow;
ShouldSendHeartBeats = false;
return;
}
string request = await GetURL().ConfigureAwait(false) + "/api/Announce";
Dictionary<string, string> data = new Dictionary<string, string>(6) {
@@ -149,9 +156,8 @@ namespace ArchiSteamFarm {
// We don't need retry logic here
if (await Program.WebBrowser.UrlPost(request, data).ConfigureAwait(false)) {
LastNickname = nickname;
LastAvatarHash = avatarHash;
LastMatchEverything = matchEverything;
LastAnnouncementCheck = DateTime.UtcNow;
ShouldSendHeartBeats = true;
}
} finally {
Semaphore.Release();

View File

@@ -1,16 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="2.0.0-beta0018" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="1.30.0-beta01" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net461" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1-beta1" targetFramework="net461" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta06" targetFramework="net461" />
<package id="protobuf-net" version="2.0.0.668" targetFramework="net45" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="1.8.1" targetFramework="net461" />
<package id="Costura.Fody" version="2.0.0-beta0018" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="1.30.0-beta01" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net461" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1" targetFramework="net461" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta06" targetFramework="net461" />
<package id="protobuf-net" version="2.0.0.668" targetFramework="net45" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="1.8.1" targetFramework="net461" />
</packages>

View File

@@ -50,7 +50,7 @@
<HintPath>..\packages\GenDictEdit.1.1.0\lib\net20\GenericDictionaryEditor.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.1-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.10.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />

View File

@@ -124,31 +124,31 @@
<value>Geavanceerd</value>
</data>
<data name="CategoryCore" xml:space="preserve">
<value>Kern</value>
<value>Login</value>
</data>
<data name="CategoryDebugging" xml:space="preserve">
<value>Foutopsporing</value>
</data>
<data name="CategoryPerformance" xml:space="preserve">
<value>Prestaties</value>
<value>Uitvoering</value>
</data>
<data name="CategoryUpdates" xml:space="preserve">
<value>Updates</value>
</data>
<data name="ConfirmRemoval" xml:space="preserve">
<value>Wil je deze configuratie echt verwijderen?</value>
<value>Weet je zeker dat je deze configuratie wilt verwijderen?</value>
</data>
<data name="ErrorBotNameEmpty" xml:space="preserve">
<value>Je bot heeft geen naam!</value>
</data>
<data name="ErrorCantRemoveGlobalConfig" xml:space="preserve">
<value>Je kan het globale config bestand niet verwijderen!</value>
<value>Je kan het globale configuratiebestand niet verwijderen!</value>
</data>
<data name="ErrorCantRenameGlobalConfig" xml:space="preserve">
<value>Je kan het globale configuratie bestand niet hernoemen!</value>
<value>Je kan het globale configuratiebestand niet hernoemen!</value>
</data>
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
<value>Configuratiefolder kon niet gevonden worden!</value>
<value>Configuratiemap kon niet gevonden worden!</value>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<value>Geconfigureerde {0} eigenschap is niet geldig: {1}</value>

View File

@@ -130,7 +130,7 @@
<value>Debuggen</value>
</data>
<data name="CategoryPerformance" xml:space="preserve">
<value>Prestaties</value>
<value>Uitvoering</value>
</data>
<data name="CategoryUpdates" xml:space="preserve">
<value>Updates</value>

View File

@@ -136,22 +136,22 @@
<value>Обновления</value>
</data>
<data name="ConfirmRemoval" xml:space="preserve">
<value>Вы действительно хотите удалить этот конфиг?</value>
<value>Вы действительно хотите удалить этот конфигурационный файл?</value>
</data>
<data name="ErrorBotNameEmpty" xml:space="preserve">
<value>Имя вашего бота не указано!</value>
</data>
<data name="ErrorCantRemoveGlobalConfig" xml:space="preserve">
<value>Невозможно удалить глобальную конфигурацию!</value>
<value>Невозможно удалить файл глобальной конфигурации!</value>
</data>
<data name="ErrorCantRenameGlobalConfig" xml:space="preserve">
<value>Невозможно переименовать глобальную конфигурацию!</value>
<value>Невозможно переименовать файл глобальной конфигурации!</value>
</data>
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
<value>Не удалось найти каталог с конфигурационными файлами!</value>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<value>Параметр настроек {0} неверен: {1}</value>
<value>Параметр {0} имеет неверное значение: {1}</value>
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by invalid value</comment>
</data>
<data name="ErrorInvalidCurrentCulture" xml:space="preserve">
@@ -235,7 +235,7 @@ ASF: {0} | ConfigGenerator: {1}
<comment>Please note that this translation should end with space</comment>
</data>
<data name="WarningConfigPropertyModified" xml:space="preserve">
<value>{0} изменен на {1}</value>
<value>Параметру {0} присвоено значение: {1}</value>
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by new value</comment>
</data>
</root>

View File

@@ -3,6 +3,6 @@
<package id="Costura.Fody" version="2.0.0-beta0018" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="1.30.0-beta01" targetFramework="net461" developmentDependency="true" />
<package id="GenDictEdit" version="1.1.0" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1-beta1" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
</packages>

View File

@@ -49,7 +49,7 @@
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.1-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.10.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Nito.AsyncEx, Version=4.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Nito.AsyncEx.4.0.1\lib\net45\Nito.AsyncEx.dll</HintPath>

View File

@@ -1,17 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="2.0.0-beta0018" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="1.30.0-beta01" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net461" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1-beta1" targetFramework="net461" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta06" targetFramework="net461" />
<package id="NLog.Windows.Forms" version="4.2.3" targetFramework="net461" />
<package id="protobuf-net" version="2.0.0.668" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="1.8.1" targetFramework="net461" />
<package id="Costura.Fody" version="2.0.0-beta0018" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="1.30.0-beta01" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net461" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net461" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.1" targetFramework="net461" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta06" targetFramework="net461" />
<package id="NLog.Windows.Forms" version="4.2.3" targetFramework="net461" />
<package id="protobuf-net" version="2.0.0.668" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="1.8.1" targetFramework="net461" />
</packages>

View File

@@ -1,5 +1,4 @@
ArchiSteamFarm
===================
# ArchiSteamFarm
[![Build Status (Windows)](https://img.shields.io/appveyor/ci/JustArchi/ArchiSteamFarm/master.svg?label=Windows&maxAge=60)](https://ci.appveyor.com/project/JustArchi/ArchiSteamFarm)
[![Build Status (Mono)](https://img.shields.io/travis/JustArchi/ArchiSteamFarm/master.svg?label=Mono&maxAge=60)](https://travis-ci.org/JustArchi/ArchiSteamFarm)
@@ -19,11 +18,15 @@ ArchiSteamFarm
---
## Description
ASF is a C# application that allows you to farm steam cards using multiple steam accounts simultaneously. Unlike Idle Master which works only for one account at given time, requires steam client running in background, and launches additional processes imitiating "game playing" status, ASF doesn't require any steam client running in the background, doesn't launch any additional processes and is made to handle unlimited steam accounts at once. In addition to that, it's meant to be run on servers or other desktop-less machines, and features full Mono support, which makes it possible to launch on any Mono-supported operating system, such as Windows, Linux or OS X. ASF is based on, and possible, thanks to [SteamKit2](https://github.com/SteamRE/SteamKit).
ASF doesn't require and doesn't interfere in any way with Steam client. In addition to that, it no longer requires exclusive access to given account, which means that you can use your main account in Steam client, and use ASF for farming the same account at the same time. If you decide to launch a game, ASF will get disconnected, and resume farming once you finish playing your game, being as transparent as possible.
**Core features**
---
### Core features
- Automatic farming of available games with card drops using any number of active accounts
- No requirement of running or even having official Steam client installed
@@ -38,24 +41,20 @@ ASF doesn't require and doesn't interfere in any way with Steam client. In addit
- Full Mono support, cross-OS compatibility, official support for Windows, Linux and OS X
- ...and many more!
**Setting up / Help**
---
Detailed guide regarding setting up and using ASF is available on **[our wiki](https://github.com/JustArchi/ArchiSteamFarm/wiki)**.
### Setting up / Help
**Supported / Tested operating systems:**
Detailed guide regarding setting up and using ASF is available on our wiki in **[setting up](https://github.com/JustArchi/ArchiSteamFarm/wiki/Setting-up)** section.
ASF officially supports Windows, Linux and OS X operating systems, including following tested variants:
---
- Windows 10 (Native)
- Windows 8.1 (Native)
- Windows 8 (Native)
- Windows 7 SP1 (Native)
- Windows Server 2012 R2 (Native)
- Windows Server 2008 R2 SP1 (Native)
- Debian 9 Stretch (Mono)
- Debian 8 Jessie (Mono)
- Ubuntu 16.04 (Mono)
- OS X 10.11 (Mono)
- OS X 10.7 (Mono)
However, any **[currently supported Windows](http://windows.microsoft.com/en-us/windows/lifecycle)** should run ASF flawlessly (with latest .NET framework), as well as any **[Mono-powered OS](http://www.mono-project.com/docs/about-mono/supported-platforms/)** (with latest Mono).
### Compatibility / Supported operating systems
ASF officially supports Windows, Linux and OS X operating systems. Please visit **[compatibility](https://github.com/JustArchi/ArchiSteamFarm/wiki/Compatibility)** section on the wiki for more info.
---
### Want to know more?
Our **[wiki](https://github.com/JustArchi/ArchiSteamFarm/wiki)** includes a lot of other articles that might help you further with using ASF, as well as show you everything that you can make use of.

Binary file not shown.

Binary file not shown.

View File

@@ -968,15 +968,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonExtensionDataAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection
@@ -7339,15 +7330,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
@@ -7400,15 +7382,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.String,System.Int32,System.Int32,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
@@ -7700,6 +7673,14 @@
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object,System.Boolean)">
<summary>
Sets the current token and value.
</summary>
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
<param name="updateIndex">A flag indicating whether the position index inside an array should be updated.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
<summary>
Sets the state based on current token type.
@@ -8226,15 +8207,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonSerializer">
<summary>
Serializes and deserializes objects into and from the JSON format.
@@ -8676,15 +8648,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver">
<summary>
<para>

Binary file not shown.

View File

@@ -1011,15 +1011,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonExtensionDataAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection
@@ -6393,15 +6384,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
@@ -6454,15 +6436,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.String,System.Int32,System.Int32,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
@@ -6760,6 +6733,14 @@
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object,System.Boolean)">
<summary>
Sets the current token and value.
</summary>
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
<param name="updateIndex">A flag indicating whether the position index inside an array should be updated.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
<summary>
Sets the state based on current token type.
@@ -7353,15 +7334,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonSerializer">
<summary>
Serializes and deserializes objects into and from the JSON format.
@@ -7803,15 +7775,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver">
<summary>
<para>

Binary file not shown.

View File

@@ -1002,15 +1002,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.DateFormatHandling">
<summary>
Specifies how dates are formatted when writing JSON text.
@@ -6593,15 +6584,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
@@ -6654,15 +6636,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.String,System.Int32,System.Int32,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
@@ -6960,6 +6933,14 @@
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object,System.Boolean)">
<summary>
Sets the current token and value.
</summary>
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
<param name="updateIndex">A flag indicating whether the position index inside an array should be updated.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
<summary>
Sets the state based on current token type.
@@ -7553,15 +7534,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonSerializer">
<summary>
Serializes and deserializes objects into and from the JSON format.
@@ -8003,15 +7975,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver">
<summary>
<para>

Binary file not shown.

View File

@@ -1901,15 +1901,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonExtensionDataAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to deserialize properties with no matching class member into the specified collection
@@ -2442,6 +2433,14 @@
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object,System.Boolean)">
<summary>
Sets the current token and value.
</summary>
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
<param name="updateIndex">A flag indicating whether the position index inside an array should be updated.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
<summary>
Sets the state based on current token type.
@@ -2502,15 +2501,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor(System.String,System.String,System.Int32,System.Int32,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonReaderException"/> class
@@ -2552,15 +2542,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonSerializationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonSerializationException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.JsonSerializer">
<summary>
Serializes and deserializes objects into and from the JSON format.
@@ -5489,15 +5470,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor(System.String,System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonWriterException"/> class
@@ -8905,15 +8877,6 @@
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or <c>null</c> if no inner exception is specified.</param>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is <c>null</c>.</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">The class name is <c>null</c> or <see cref="P:System.Exception.HResult"/> is zero (0).</exception>
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator">
<summary>
<para>

View File

@@ -337,6 +337,38 @@
Json.NET will use a non-public default constructor before falling back to a parameterized constructor.
</summary>
</member>
<member name="T:Newtonsoft.Json.Converters.BinaryConverter">
<summary>
Converts a binary value to and from a base 64 string value.
</summary>
</member>
<member name="M:Newtonsoft.Json.Converters.BinaryConverter.WriteJson(Newtonsoft.Json.JsonWriter,System.Object,Newtonsoft.Json.JsonSerializer)">
<summary>
Writes the JSON representation of the object.
</summary>
<param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param>
<param name="value">The value.</param>
<param name="serializer">The calling serializer.</param>
</member>
<member name="M:Newtonsoft.Json.Converters.BinaryConverter.ReadJson(Newtonsoft.Json.JsonReader,System.Type,System.Object,Newtonsoft.Json.JsonSerializer)">
<summary>
Reads the JSON representation of the object.
</summary>
<param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
<param name="objectType">Type of the object.</param>
<param name="existingValue">The existing value of object being read.</param>
<param name="serializer">The calling serializer.</param>
<returns>The object value.</returns>
</member>
<member name="M:Newtonsoft.Json.Converters.BinaryConverter.CanConvert(System.Type)">
<summary>
Determines whether this instance can convert the specified object type.
</summary>
<param name="objectType">Type of the object.</param>
<returns>
<c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
</returns>
</member>
<member name="T:Newtonsoft.Json.Converters.BsonObjectIdConverter">
<summary>
Converts a <see cref="T:Newtonsoft.Json.Bson.BsonObjectId"/> to and from JSON and BSON.
@@ -2253,6 +2285,14 @@
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetToken(Newtonsoft.Json.JsonToken,System.Object,System.Boolean)">
<summary>
Sets the current token and value.
</summary>
<param name="newToken">The new token.</param>
<param name="value">The value.</param>
<param name="updateIndex">A flag indicating whether the position index inside an array should be updated.</param>
</member>
<member name="M:Newtonsoft.Json.JsonReader.SetStateBasedOnCurrent">
<summary>
Sets the state based on current token type.

Binary file not shown.

View File

@@ -5,10 +5,6 @@ SET TEMPFILE=%TEMP%\tmpfile
setx /M CROWDIN_HOME "%cd%"
setx /M PATH "%PATH%;%cd%"
IF NOT EXIST "%JAVA_HOME%\bin\java.exe" (
ECHO Looks like JAVA is not installed
)
"%JAVA_HOME%\bin\java" -version 2>& 1 | FIND "java version" > %TEMPFILE%
SET /p VERSIONSTRING= < %TEMPFILE%
DEL %TEMPFILE%