Compare commits

..

34 Commits

Author SHA1 Message Date
JustArchi
b80dee15b0 Fix proxy bot commands 2017-06-15 21:51:27 +02:00
JustArchi
e1c0d780e1 Bump 2017-06-15 20:41:30 +02:00
JustArchi
e61f69e885 Misc 2017-06-15 20:41:17 +02:00
JustArchi
7630029a50 Translation updates 2017-06-15 20:38:52 +02:00
JustArchi
1356fc2ca4 Blacklist Summer Sale 2017 badge 2017-06-15 20:33:50 +02:00
JustArchi
70a9e0bb67 Packages update 2017-06-15 20:30:23 +02:00
JustArchi
b3c9fa3853 Misc 2017-06-15 20:27:57 +02:00
JustArchi
5b0aa72367 Misc 2017-06-15 02:59:03 +02:00
JustArchi
3ada24502f Misc 2017-06-15 02:57:06 +02:00
JustArchi
6714f5bf2b Add hack that closes #573 2017-06-14 16:58:36 +02:00
JustArchi
b2f523ca03 Add patreon link 2017-06-13 19:07:29 +02:00
JustArchi
4e4349e9ba Misc ArchiBoT optimization 2017-06-13 09:33:21 +02:00
JustArchi
d140664765 Translations update 2017-06-13 07:40:32 +02:00
JustArchi
e8120f172f Add !stats command 2017-06-13 07:35:41 +02:00
JustArchi
717666e271 Bump 2017-06-11 20:11:16 +02:00
JustArchi
b5c0ec009c Packages update 2017-06-11 20:06:32 +02:00
JustArchi
c9abffda59 Improve SendTradePeriod to use new looting code 2017-06-11 20:05:34 +02:00
JustArchi
7543f283bc Translation updates 2017-06-08 04:28:11 +02:00
JustArchi
40acae82c7 Bump 2017-06-07 06:54:18 +02:00
JustArchi
99b898a7d2 Packages update 2017-06-06 22:06:26 +02:00
JustArchi
782983780d Make !pause affect GamesPlayedWhileIdle 2017-06-06 22:01:40 +02:00
JustArchi
d77b6aa13f Fix build 2017-06-03 19:08:02 +02:00
JustArchi
9db9f7fafa Fix build 2017-06-03 19:07:35 +02:00
JustArchi
0892467526 Packages update 2017-06-03 19:05:54 +02:00
JustArchi
a09271ae3e Cleanup old winter sale code 2017-06-03 18:59:22 +02:00
JustArchi
76a98c09e8 Misc 2017-05-31 21:49:42 +02:00
Łukasz Domeradzki
51a4cd0834 Merge pull request #559 from Evanito/patch-1
Spelling: Reproducable -> Reproducible
2017-05-31 01:47:26 +02:00
Evan
2cfb100c5e Spelling: Reproducable -> Reproducible 2017-05-30 16:12:32 -07:00
JustArchi
148f431925 Misc
Null messages are sometimes being sent by improperly coded bots, no need to raise warning on them
2017-05-30 00:33:53 +02:00
JustArchi
ac3daf7369 Optimize offline messages
This is something I stumbled upon by accident when analyzing things in ArchiBoT.
Valve actually does tell us all steamIDs we have pending messages from BEFORE we even ask for offline messages, so we can use that info in order to check if there is actually anybody permitted to use commands, if not, we can skip asking for those messages as they'd not result in executing any command anyway, and this way we can skip marking messages as read when there is nothing interesting for us to see.
2017-05-30 00:30:04 +02:00
JustArchi
ee60cbecef Misc 2017-05-29 23:19:58 +02:00
JustArchi
f7e0fca199 Packages update 2017-05-28 18:11:18 +02:00
JustArchi
949a201745 Attempt to fix OS X Mono build 2017-05-28 13:09:15 +02:00
JustArchi
ea0a1ab086 Bump 2017-05-26 04:59:07 +02:00
130 changed files with 1077 additions and 580 deletions

View File

@@ -8,7 +8,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="protobuf-net" publicKeyToken="257b51d87d2e4d67" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
<bindingRedirect oldVersion="0.0.0.0-2.2.1.0" newVersion="2.2.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -343,6 +343,7 @@ namespace ArchiSteamFarm {
internal sealed class OfflineMessageCallback : CallbackMsg {
internal readonly uint OfflineMessagesCount;
internal readonly HashSet<uint> Steam3IDs;
internal OfflineMessageCallback(JobID jobID, CMsgClientOfflineMessageNotification msg) {
if ((jobID == null) || (msg == null)) {
@@ -351,6 +352,12 @@ namespace ArchiSteamFarm {
JobID = jobID;
OfflineMessagesCount = msg.offline_messages;
if (msg.friends_with_offline_messages == null) {
return;
}
Steam3IDs = new HashSet<uint>(msg.friends_with_offline_messages);
}
}

View File

@@ -75,8 +75,12 @@
<DelaySign>false</DelaySign>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=1.6.2.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.1.6.2\lib\dotnet\Costura.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.5.0.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.5.0-beta5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<HintPath>..\packages\HtmlAgilityPack.1.5.0-beta8\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="Humanizer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\packages\Humanizer.Core.2.2.0\lib\netstandard1.0\Humanizer.dll</HintPath>
@@ -99,8 +103,8 @@
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.0-beta07\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="protobuf-net, Version=2.2.0.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.2.2.0\lib\net40\protobuf-net.dll</HintPath>
<Reference Include="protobuf-net, Version=2.2.1.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.2.2.1\lib\net40\protobuf-net.dll</HintPath>
</Reference>
<Reference Include="SteamKit2, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SteamKit2.2.0.0-Alpha4\lib\net46\SteamKit2.dll</HintPath>
@@ -274,8 +278,8 @@
cp "$(TargetDir)config/example.json" "$(SolutionDir)out/config"
cp "$(TargetDir)config/minimal.json" "$(SolutionDir)out/config"
if [ -n "$MONO_FACADES" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:$MONO_FACADES" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-Service.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
if [ -n "$MONO_API_PATH" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:${MONO_API_PATH}" "/lib:${MONO_API_PATH}/Facades" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-Service.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
else
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-Service.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
fi
@@ -290,12 +294,13 @@
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Import Project="..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" />
<Import Project="..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" />
<Import Project="..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" />
<Import Project="..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'WITHOUT_ILREPACK' AND Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@@ -137,7 +137,6 @@ namespace ArchiSteamFarm {
return htmlDocument?.DocumentNode.SelectSingleNode("//div[@class='add_free_content_success_area']") != null;
}
/*
internal async Task<bool> ClearFromDiscoveryQueue(uint appID) {
if (appID == 0) {
Bot.ArchiLogger.LogNullError(nameof(appID));
@@ -162,7 +161,6 @@ namespace ArchiSteamFarm {
return await WebBrowser.UrlPostRetry(request, data).ConfigureAwait(false);
}
*/
internal async Task DeclineTradeOffer(ulong tradeID) {
if (tradeID == 0) {
@@ -199,7 +197,6 @@ namespace ArchiSteamFarm {
}
}
/*
internal async Task<HashSet<uint>> GenerateNewDiscoveryQueue() {
if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) {
return null;
@@ -220,7 +217,6 @@ namespace ArchiSteamFarm {
Steam.NewDiscoveryQueueResponse output = await WebBrowser.UrlPostToJsonResultRetry<Steam.NewDiscoveryQueueResponse>(request, data).ConfigureAwait(false);
return output?.Queue;
}
*/
internal async Task<HashSet<Steam.TradeOffer>> GetActiveTradeOffers() {
string steamApiKey = await GetApiKey().ConfigureAwait(false);
@@ -384,7 +380,6 @@ namespace ArchiSteamFarm {
return await WebBrowser.UrlGetToHtmlDocumentRetry(request).ConfigureAwait(false);
}
/*
internal async Task<HtmlDocument> GetDiscoveryQueuePage() {
if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) {
return null;
@@ -393,7 +388,6 @@ namespace ArchiSteamFarm {
const string request = SteamStoreURL + "/explore?l=english";
return await WebBrowser.UrlGetToHtmlDocumentRetry(request).ConfigureAwait(false);
}
*/
internal async Task<HashSet<ulong>> GetFamilySharingSteamIDs() {
if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) {
@@ -688,17 +682,6 @@ namespace ArchiSteamFarm {
return 0;
}
/*
internal async Task<HtmlDocument> GetSteamAwardsPage() {
if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) {
return null;
}
const string request = SteamStoreURL + "/SteamAwards?l=english";
return await WebBrowser.UrlGetToHtmlDocumentRetry(request).ConfigureAwait(false);
}
*/
internal async Task<byte?> GetTradeHoldDuration(ulong tradeID) {
if (tradeID == 0) {
Bot.ArchiLogger.LogNullError(nameof(tradeID));
@@ -1010,20 +993,17 @@ namespace ArchiSteamFarm {
Steam.TradeOfferRequest singleTrade = new Steam.TradeOfferRequest();
HashSet<Steam.TradeOfferRequest> trades = new HashSet<Steam.TradeOfferRequest> { singleTrade };
byte itemID = 0;
foreach (Steam.Item item in inventory) {
if (itemID >= Trading.MaxItemsPerTrade) {
if (singleTrade.ItemsToGive.Assets.Count >= Trading.MaxItemsPerTrade) {
if (trades.Count >= Trading.MaxTradesPerAccount) {
break;
}
singleTrade = new Steam.TradeOfferRequest();
trades.Add(singleTrade);
itemID = 0;
}
singleTrade.ItemsToGive.Assets.Add(item);
itemID++;
}
const string referer = SteamCommunityURL + "/tradeoffer/new";
@@ -1170,34 +1150,6 @@ namespace ArchiSteamFarm {
return (ESteamApiKeyState.Error, null);
}
/*
internal async Task<bool> SteamAwardsVote(byte voteID, uint appID) {
if ((voteID == 0) || (appID == 0)) {
Bot.ArchiLogger.LogNullError(nameof(voteID) + " || " + nameof(appID));
return false;
}
if (!await RefreshSessionIfNeeded().ConfigureAwait(false)) {
return false;
}
string sessionID = WebBrowser.CookieContainer.GetCookieValue(SteamStoreURL, "sessionid");
if (string.IsNullOrEmpty(sessionID)) {
Bot.ArchiLogger.LogNullError(nameof(sessionID));
return false;
}
const string request = SteamStoreURL + "/salevote";
Dictionary<string, string> data = new Dictionary<string, string>(3) {
{ "sessionid", sessionID },
{ "voteid", voteID.ToString() },
{ "appid", appID.ToString() }
};
return await WebBrowser.UrlPostRetry(request, data).ConfigureAwait(false);
}
*/
private static uint GetAppIDFromMarketHashName(string hashName) {
if (string.IsNullOrEmpty(hashName)) {
ASF.ArchiLogger.LogNullError(nameof(hashName));

View File

@@ -87,7 +87,7 @@ namespace ArchiSteamFarm {
private readonly SteamClient SteamClient;
private readonly ConcurrentHashSet<ulong> SteamFamilySharingIDs = new ConcurrentHashSet<ulong>();
private readonly SteamFriends SteamFriends;
//private readonly SteamSaleEvent SteamSaleEvent;
private readonly SteamSaleEvent SteamSaleEvent;
private readonly SteamUser SteamUser;
private readonly Trading Trading;
@@ -211,7 +211,7 @@ namespace ArchiSteamFarm {
ArchiWebHandler = new ArchiWebHandler(this);
CardsFarmer = new CardsFarmer(this);
//SteamSaleEvent = new SteamSaleEvent(this);
SteamSaleEvent = new SteamSaleEvent(this);
Trading = new Trading(this);
if (!Debugging.IsDebugBuild && Program.GlobalConfig.Statistics) {
@@ -235,7 +235,7 @@ namespace ArchiSteamFarm {
HeartBeatTimer.Dispose();
CallbackSemaphore.Dispose();
InitializationSemaphore.Dispose();
//SteamSaleEvent.Dispose();
SteamSaleEvent.Dispose();
Trading.Dispose();
// Those are objects that might be null and the check should be in-place
@@ -663,6 +663,8 @@ namespace ArchiSteamFarm {
return ResponseRestart(steamID);
case "!SA":
return await ResponseStatus(steamID, SharedInfo.ASF).ConfigureAwait(false);
case "!STATS":
return ResponseStats(steamID);
case "!STATUS":
return ResponseStatus(steamID);
case "!STOP":
@@ -1118,19 +1120,16 @@ namespace ArchiSteamFarm {
return;
}
ulong steamMasterID = BotConfig.SteamUserPermissions.Where(kv => kv.Value == BotConfig.EPermission.Master).Select(kv => kv.Key).FirstOrDefault();
ulong steamMasterID = GetFirstSteamMasterID();
if (steamMasterID == 0) {
return;
}
TimeSpan delay = TimeSpan.FromHours(BotConfig.SendTradePeriod) + TimeSpan.FromMinutes(Bots.Count);
TimeSpan period = TimeSpan.FromHours(BotConfig.SendTradePeriod);
SendItemsTimer = new Timer(
async e => await ResponseLoot(steamMasterID).ConfigureAwait(false),
null,
delay, // Delay
period // Period
TimeSpan.FromHours(BotConfig.SendTradePeriod) + TimeSpan.FromMinutes(Bots.Count), // Delay
TimeSpan.FromHours(BotConfig.SendTradePeriod) // Period
);
}
@@ -1158,6 +1157,17 @@ namespace ArchiSteamFarm {
await Start().ConfigureAwait(false);
}
private static bool IsAllowedToExecuteCommands(ulong steamID) {
if (steamID == 0) {
ASF.ArchiLogger.LogNullError(nameof(steamID));
return false;
}
// This should have reference to lowest permission for command execution
bool result = Bots.Values.Any(bot => bot.IsFamilySharing(steamID));
return result;
}
private bool IsFamilySharing(ulong steamID) {
if (steamID == 0) {
ArchiLogger.LogNullError(nameof(steamID));
@@ -1293,17 +1303,21 @@ namespace ArchiSteamFarm {
return;
}
if (callback.ChatMsgType != EChatEntryType.ChatMsg) {
if ((callback.ChatMsgType != EChatEntryType.ChatMsg) || string.IsNullOrEmpty(callback.Message)) {
return;
}
if ((callback.ChatRoomID == null) || (callback.ChatterID == null) || string.IsNullOrEmpty(callback.Message)) {
ArchiLogger.LogNullError(nameof(callback.ChatRoomID) + " || " + nameof(callback.ChatterID) + " || " + nameof(callback.Message));
if ((callback.ChatRoomID == null) || (callback.ChatterID == null)) {
ArchiLogger.LogNullError(nameof(callback.ChatRoomID) + " || " + nameof(callback.ChatterID));
return;
}
ArchiLogger.LogGenericTrace(callback.ChatRoomID.ConvertToUInt64() + "/" + callback.ChatterID.ConvertToUInt64() + ": " + callback.Message);
if (!IsAllowedToExecuteCommands(callback.ChatterID)) {
return;
}
switch (callback.Message.ToUpperInvariant()) {
case "!LEAVE":
if (!IsMaster(callback.ChatterID)) {
@@ -1469,14 +1483,19 @@ namespace ArchiSteamFarm {
return;
}
// We should never ever get friend message in the first place when we're using FarmOffline
// But due to Valve's fuckups, everything is possible, and this case must be checked too
if ((callback.EntryType != EChatEntryType.ChatMsg) || string.IsNullOrEmpty(callback.Message) || (BotConfig.FarmOffline && BotConfig.HandleOfflineMessages)) {
if ((callback.EntryType != EChatEntryType.ChatMsg) || string.IsNullOrEmpty(callback.Message)) {
return;
}
ArchiLogger.LogGenericTrace(callback.Sender.ConvertToUInt64() + ": " + callback.Message);
// We should never ever get friend message in the first place when we're using FarmOffline
// But due to Valve's fuckups, everything is possible, and this case must be checked too
// Additionally, we might even make use of that if user didn't enable HandleOfflineMessages
if (!IsAllowedToExecuteCommands(callback.Sender) || (BotConfig.FarmOffline && BotConfig.HandleOfflineMessages)) {
return;
}
await HandleMessage(callback.Sender, callback.Sender, callback.Message).ConfigureAwait(false);
}
@@ -1490,23 +1509,17 @@ namespace ArchiSteamFarm {
return;
}
// Get last message
SteamFriends.FriendMsgHistoryCallback.FriendMessage lastMessage = callback.Messages[callback.Messages.Count - 1];
bool isAllowedToExecuteCommands = IsAllowedToExecuteCommands(callback.SteamID);
// If message is read already, return
if (!lastMessage.Unread) {
return;
foreach (SteamFriends.FriendMsgHistoryCallback.FriendMessage message in callback.Messages.Where(message => !string.IsNullOrEmpty(message.Message) && message.Unread)) {
ArchiLogger.LogGenericTrace(message.SteamID.ConvertToUInt64() + ": " + message.Message);
if (!isAllowedToExecuteCommands || (DateTime.UtcNow.Subtract(message.Timestamp).TotalHours > 1)) {
continue;
}
await HandleMessage(message.SteamID, message.SteamID, message.Message).ConfigureAwait(false);
}
// If message is too old, return
if (DateTime.UtcNow.Subtract(lastMessage.Timestamp).TotalHours > 1) {
return;
}
ArchiLogger.LogGenericTrace(callback.SteamID.ConvertToUInt64() + ": " + lastMessage.Message);
// Handle the message
await HandleMessage(callback.SteamID, callback.SteamID, lastMessage.Message).ConfigureAwait(false);
}
private void OnFriendsList(SteamFriends.FriendsListCallback callback) {
@@ -1815,12 +1828,14 @@ namespace ArchiSteamFarm {
}
private void OnOfflineMessage(ArchiHandler.OfflineMessageCallback callback) {
if (callback == null) {
ArchiLogger.LogNullError(nameof(callback));
if (callback?.Steam3IDs == null) {
ArchiLogger.LogNullError(nameof(callback) + " || " + nameof(callback.Steam3IDs));
return;
}
if ((callback.OfflineMessagesCount == 0) || !BotConfig.HandleOfflineMessages) {
// Ignore event if we don't have any messages considering any of our permitted users
// This allows us to skip marking offline messages as read when there is no need to ask for them
if ((callback.OfflineMessagesCount == 0) || (callback.Steam3IDs.Count == 0) || !BotConfig.HandleOfflineMessages || !callback.Steam3IDs.Any(steam3ID => IsAllowedToExecuteCommands(new SteamID(steam3ID, EUniverse.Public, EAccountType.Individual)))) {
return;
}
@@ -2785,6 +2800,14 @@ namespace ArchiSteamFarm {
await CardsFarmer.Pause(sticky).ConfigureAwait(false);
if (BotConfig.GamesPlayedWhileIdle.Count > 0) {
// In this case we must also stop GamesPlayedWhileIdle
// We add extra delay because OnFarmingStopped() also executes PlayGames()
// Despite of proper order on our end, Steam network might not respect it
await Task.Delay(CallbackSleep).ConfigureAwait(false);
ArchiHandler.PlayGames(Enumerable.Empty<uint>(), BotConfig.CustomGamePlayedWhileIdle);
}
if (IsOperator(steamID)) {
return FormatBotResponse(Strings.BotAutomaticIdlingNowPaused);
}
@@ -3287,6 +3310,20 @@ namespace ArchiSteamFarm {
return responses.Count > 0 ? string.Join("", responses) : null;
}
private string ResponseStats(ulong steamID) {
if (steamID == 0) {
ArchiLogger.LogNullError(nameof(steamID));
return null;
}
if (!IsOwner(steamID)) {
return null;
}
ushort memoryInMegabytes = (ushort) (GC.GetTotalMemory(true) / 1024 / 1024);
return FormatBotResponse(string.Format(Strings.BotStats, memoryInMegabytes));
}
private string ResponseStatus(ulong steamID) {
if (steamID == 0) {
ArchiLogger.LogNullError(nameof(steamID));

View File

@@ -39,7 +39,7 @@ namespace ArchiSteamFarm {
internal const ushort DefaultWCFPort = 1242;
// This is hardcoded blacklist which should not be possible to change
internal static readonly HashSet<uint> GlobalBlacklist = new HashSet<uint> { 267420, 303700, 335590, 368020, 425280, 480730, 566020 };
internal static readonly HashSet<uint> GlobalBlacklist = new HashSet<uint> { 267420, 303700, 335590, 368020, 425280, 480730, 566020, 639900 };
[JsonProperty(Required = Required.DisallowNull)]
internal readonly bool AutoRestart = true;

View File

@@ -354,7 +354,6 @@ namespace ArchiSteamFarm.JSON {
}
// Deserialized from JSON
[SuppressMessage("ReSharper", "UnusedMember.Local")]
private Item() { }
internal enum EType : byte {
@@ -368,7 +367,6 @@ namespace ArchiSteamFarm.JSON {
}
}
/*
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]
internal sealed class NewDiscoveryQueueResponse {
@@ -380,7 +378,6 @@ namespace ArchiSteamFarm.JSON {
// Deserialized from JSON
private NewDiscoveryQueueResponse() { }
}
*/
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]

View File

@@ -19,7 +19,7 @@ namespace ArchiSteamFarm.Localization {
// przez narzędzie, takie jak ResGen lub Visual Studio.
// Aby dodać lub usunąć członka, edytuj plik .ResX, a następnie ponownie uruchom ResGen
// z opcją /str lub ponownie utwórz projekt VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Strings {
@@ -537,6 +537,15 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Wyszukuje zlokalizowany ciąg podobny do ciągu Current memory usage: {0} MB..
/// </summary>
internal static string BotStats {
get {
return ResourceManager.GetString("BotStats", resourceCulture);
}
}
/// <summary>
/// Wyszukuje zlokalizowany ciąg podobny do ciągu Bot is connecting to Steam network..
/// </summary>

View File

@@ -279,6 +279,7 @@
</root>

View File

@@ -328,6 +328,7 @@
</root>

View File

@@ -595,4 +595,5 @@
<value>Достъпът отказан!</value>
</data>
</root>

View File

@@ -279,6 +279,7 @@
</root>

View File

@@ -691,4 +691,5 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Používáte verzi, která je novější než poslední vydaná verze pro váš kanál aktualizací. Vezměte prosím na vědomí, že verze před vydáním jsou určeny pro uživatele, kteří vědí, jak hlásit chyby, řešit problémy a poskytovat zpětnou vazbu - neposkytujeme pro ně žádnou technickou podporu.</value>
</data>
</root>

View File

@@ -117,168 +117,581 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AcceptingTrade" xml:space="preserve">
<value>Acceptere handel: {0}</value>
<comment>{0} will be replaced by trade number</comment>
</data>
<data name="AutoUpdateCheckInfo" xml:space="preserve">
<value>ASF vill automatisk undersøge for nye versioner hver {0}.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "24 hours")</comment>
</data>
<data name="Content" xml:space="preserve">
<value>Indhold: {0}</value>
<comment>{0} will be replaced by content string. Please note that this string should include newline for formatting.</comment>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<value>Konfigureret {0} egenskab er forkert: {1}</value>
<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} har ramt en fatal undtagelse før kernelogging modulet selv kunne initialisere!</value>
<comment>{0} will be replaced by version number</comment>
</data>
<data name="ErrorEarlyFatalExceptionPrint" xml:space="preserve">
<value>Undtagelse: {0}(){1}
StackTrace:
{2}</value>
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
</data>
<data name="ErrorExitingWithNonZeroErrorCode" xml:space="preserve">
<value>Lukker ned med ikkenul fejlkode!</value>
</data>
<data name="ErrorFailingRequest" xml:space="preserve">
<value>Forespørgsel fejler: {0}</value>
<comment>{0} will be replaced by URL of the request</comment>
</data>
<data name="ErrorGlobalConfigNotLoaded" xml:space="preserve">
<value>Global konfiguration kunne ikke blive hentet. Vær sikker på {0} eksistere og er gyldig! Følg opsætnings guiden på wikien hvis du er i tvivl.</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorIsInvalid" xml:space="preserve">
<value>{0} er gyldig!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="ErrorMobileAuthenticatorInvalidDeviceID" xml:space="preserve">
<value>Nægter at udføre denne funktion på grund af ugyldig DeviceID i ASF 2FA!</value>
</data>
<data name="ErrorNoBotsDefined" xml:space="preserve">
<value>Ingen botter er defineret. Har du glemt at konfigurere din ASF?</value>
</data>
<data name="ErrorObjectIsNull" xml:space="preserve">
<value>{0} er nul!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="ErrorParsingObject" xml:space="preserve">
<value>Parsing {0} fejlet!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="ErrorRemovingOldBinary" xml:space="preserve">
<value>Kunne ikke fjerne gammel ASF binær fil. Vær venlig at fjerne {0} manuelt for at opdaterings funktionen virker!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorRequestFailedTooManyTimes" xml:space="preserve">
<value>Anmodning fejlede efter {0} forsøg!</value>
<comment>{0} will be replaced by maximum number of tries</comment>
</data>
<data name="ErrorUpdateCheckFailed" xml:space="preserve">
<value>Kunne ikke undersøge seneste version!</value>
</data>
<data name="ErrorUpdateNoAssetForThisBinary" xml:space="preserve">
<value>Kunne ikke fortsætte med opdateringen fordi der er intet aktiv der relatere til nuværende kørende binær! Venlig tjek om din ASF binær har det rette navn!</value>
</data>
<data name="ErrorUpdateNoAssets" xml:space="preserve">
<value>Kunne ikke fortsætte med en opdatering da den version ikke inkludere nogen aktiver!</value>
</data>
<data name="ErrorUserInputRunningInHeadlessMode" xml:space="preserve">
<value>Modtog en anmodning for bruger input, men processen kører i hovedløs tilstand!</value>
</data>
<data name="ErrorWCFAccessDenied" xml:space="preserve">
<value>Nægter at håndtere forespørgelsen fordi SteamOwnerID ikker er sat!</value>
<comment>SteamOwnerID is name of bot config property, it should not be translated</comment>
</data>
<data name="Exiting" xml:space="preserve">
<value>Forlader...</value>
</data>
<data name="WarningFailed" xml:space="preserve">
<value>Fejlede!</value>
</data>
<data name="GlobalConfigChanged" xml:space="preserve">
<value>Global konfigureringsfil er blevet ændret!</value>
</data>
<data name="ErrorGlobalConfigRemoved" xml:space="preserve">
<value>Global konfigureringsfil er blevet fjernet!</value>
</data>
<data name="IgnoringTrade" xml:space="preserve">
<value>Ignorere handel: {0}</value>
<comment>{0} will be replaced by trade number</comment>
</data>
<data name="LoggingIn" xml:space="preserve">
<value>Logger ind til {0}...</value>
<comment>{0} will be replaced by service's name</comment>
</data>
<data name="NoBotsAreRunning" xml:space="preserve">
<value>Ingen botter køre, forlader...</value>
</data>
<data name="RefreshingOurSession" xml:space="preserve">
<value>Nægter vores session!</value>
</data>
<data name="RejectingTrade" xml:space="preserve">
<value>Afviser handel: {0}</value>
<comment>{0} will be replaced by trade number</comment>
</data>
<data name="Restarting" xml:space="preserve">
<value>Genstarter...</value>
</data>
<data name="WarningRuntimeUnsupported" xml:space="preserve">
<value>ASF har opdaget en ikke undertøttet runtime version, programmet kan muligvis IKKE køre korrekt i nuværende miljø. Du køre det i eget ansvar uden support!</value>
</data>
<data name="RuntimeVersionComparison" xml:space="preserve">
<value>Kræver version: {0} | Fundet version: {1}</value>
<comment>{0} will be replaced by required version, {1} will be replaced by current version</comment>
</data>
<data name="RuntimeVersionOK" xml:space="preserve">
<value>Din {0} runtime version er OK.</value>
<comment>{0} will be replaced by runtime name (e.g. "Mono")</comment>
</data>
<data name="WarningRuntimeVersionTooOld" xml:space="preserve">
<value>Din {0} runtime version er for gammel!</value>
<comment>{0} will be replaced by runtime name (e.g. "Mono")</comment>
</data>
<data name="Starting" xml:space="preserve">
<value>Starter...</value>
</data>
<data name="StatusCode" xml:space="preserve">
<value>Status kode: {0}</value>
<comment>{0} will be replaced by status code number/name</comment>
</data>
<data name="Success" xml:space="preserve">
<value>Success!</value>
</data>
<data name="UnlockingParentalAccount" xml:space="preserve">
<value>Låser forældre konto op...</value>
</data>
<data name="UpdateCheckingNewVersion" xml:space="preserve">
<value>Undersøger for ny version...</value>
</data>
<data name="UpdateDownloadingNewVersion" xml:space="preserve">
<value>Downloader ny version... Mens du venter, overvej at donere hvis du sætter pris på det arbejde der bliver gjort! :)</value>
</data>
<data name="UpdateFinished" xml:space="preserve">
<value>Opdateringsprocessen er færdig!</value>
</data>
<data name="UpdateNewVersionAvailable" xml:space="preserve">
<value>Ny ASF version er ledig! Overvej at opdatér!</value>
</data>
<data name="UpdateVersionInfo" xml:space="preserve">
<value>Lokal version: {0} | Fjernversion: {1}</value>
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
</data>
<data name="UserInputDeviceID" xml:space="preserve">
<value>Venligst indtast din mobil autentificering enhed ID ("android" inkluderet:"): </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputSteam2FA" xml:space="preserve">
<value>Venligst indtast din 2FA kode fra din steam autentificering app: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputSteamGuard" xml:space="preserve">
<value>Venligst indtast SteamGuard autentificering kode der var sent til din e-mail: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputSteamLogin" xml:space="preserve">
<value>Venligst indtast dit Steam login: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputSteamParentalPIN" xml:space="preserve">
<value>Venligst indtast Steam forældre PIN: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputSteamPassword" xml:space="preserve">
<value>Venligst indtast dit Steam kodeord: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="UserInputUnknown" xml:space="preserve">
<value>Indtast venligst udokumenteret værdig af {0}: </value>
<comment>{0} will be replaced by property name. Please note that this translation should end with space</comment>
</data>
<data name="UserInputWCFHost" xml:space="preserve">
<value>Venligst indtast din WCF vært: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="WarningUnknownValuePleaseReport" xml:space="preserve">
<value>Modtog ukendt værdi for {0}, venligst rapportér dette: {1}</value>
<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>Spille mere end {0} spil samtidigt er ikke muligt, kun første {0} poster fra {1} vil blive brugt!</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>Ignorerer WCF kommando fordi--klient ikke var angivet: {0}</value>
<comment>{0} will be replaced by WCF command</comment>
</data>
<data name="ErrorWCFAddressAccessDeniedException" xml:space="preserve">
<value>WCF-tjenesten kunne ikke startes på grund af AddressAccessDeniedException! Hvis du vil bruge WCF-tjenesten leveret af ASF, overvej at starte ASF som administrator, eller at give korrekte tilladelser!</value>
</data>
<data name="WCFAnswered" xml:space="preserve">
<value>Svarede til WCF kommandoen: {0} med: {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">
<value>WCF server klar!</value>
</data>
<data name="WCFResponseReceived" xml:space="preserve">
<value>WCF svar modtaget: {0}</value>
<comment>{0} will be replaced by WCF response</comment>
</data>
<data name="WCFSendingCommand" xml:space="preserve">
<value>Sender kommandoen: {0} til WCF serveren på {1}...</value>
<comment>{0} will be replaced by WCF command, {1} will be replaced by WCF hostname</comment>
</data>
<data name="WCFStarting" xml:space="preserve">
<value>Starter WCF serveren på {0}...</value>
<comment>{0} will be replaced by WCF hostname</comment>
</data>
<data name="BotAlreadyStopped" xml:space="preserve">
<value>Denne bot er allerede stoppet!</value>
</data>
<data name="BotNotFound" xml:space="preserve">
<value>Kunne ikke finde nogen bot der hedder {0}!</value>
<comment>{0} will be replaced by bot's name query (string)</comment>
</data>
<data name="BotStatusOverview" xml:space="preserve">
<value>Der er {0}/{1} bots kørende med en total af {2} spil ({3} kort) tilbage at idle.</value>
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to idle, {3} will be replaced by total number of cards left to idle</comment>
</data>
<data name="BotStatusIdling" xml:space="preserve">
<value>Botten idler spil: {0} ({1}, {2} kort drop tilbage) fra i alt {3} spil ({4} kort) tilbage at idle (~{5} tilbage).</value>
<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, {3} will be replaced by total number of games to idle, {4} will be replaced by total number of cards to idle, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="BotStatusIdlingList" xml:space="preserve">
<value>Botten idler spil: {0} fra en total af {1} spil ({2} kort) tilbage at idle (~{3} tilbage).</value>
<comment>{0} will be replaced by list of the games (IDs, numbers), {1} will be replaced by total number of games to idle, {2} will be replaced by total number of cards to idle, {3} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="CheckingFirstBadgePage" xml:space="preserve">
<value>Tjekker første badge side...</value>
</data>
<data name="CheckingOtherBadgePages" xml:space="preserve">
<value>Tjekker andre badge sider...</value>
</data>
<data name="ChosenFarmingAlgorithm" xml:space="preserve">
<value>Valgte idle algoritme: {0}</value>
<comment>{0} will be replaced by the name of chosen idling algorithm</comment>
</data>
<data name="Done" xml:space="preserve">
<value>Færdig!</value>
</data>
<data name="GamesToIdle" xml:space="preserve">
<value>Vi har totalt {0} spil ({1} kort) tilbage at idle (~{2} tilbage)...</value>
<comment>{0} will be replaced by number of games, {1} will be replaced by number of cards, {2} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="IdlingFinished" xml:space="preserve">
<value>Idling færdig!</value>
</data>
<data name="IdlingFinishedForGame" xml:space="preserve">
<value>Færdiggjort idling: {0} ({1}) efter {2} spilletid!</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="IdlingFinishedForGames" xml:space="preserve">
<value>Færdig med at idle spil: {0}</value>
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
</data>
<data name="IdlingStatusForGame" xml:space="preserve">
<value>Idle status for {0} ({1}): {2} kort tilbage</value>
<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>Idling stoppede!</value>
</data>
<data name="IgnoredStickyPauseEnabled" xml:space="preserve">
<value>Ignorere denne anmodning da sticky pause er aktiveret!</value>
</data>
<data name="NothingToIdle" xml:space="preserve">
<value>Vi har ikke noget at idle på denne konto!</value>
</data>
<data name="NowIdling" xml:space="preserve">
<value>Idler nu: {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>Idler nu: {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>Det er ikke muligt at spille nu, vi vil prøve igen senere!</value>
</data>
<data name="StillIdling" xml:space="preserve">
<value>Idler stadig: {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>Idler stadig: {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>Stoppede med at idle: {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>Stoppede med at idle: {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">
<value>Ukendt kommando!</value>
</data>
<data name="WarningCouldNotCheckBadges" xml:space="preserve">
<value>Kunne ikke hente badgens informationer, vi vil prøve igen senere!</value>
</data>
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
<value>Kunne ikke tjekke kort status for: {0} ({1}), vi vil prøve igen senere!</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">
<value>Acceptere gave: {0}...</value>
<comment>{0} will be replaced by giftID (number)</comment>
</data>
<data name="BotAccountLimited" xml:space="preserve">
<value>Denne konto er begrænset, idling processen er ikke tilgængelig indtil begrænsningen er fjernet!</value>
</data>
<data name="BotAddLicense" xml:space="preserve">
<value>ID: {0} | Status: {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string</comment>
</data>
<data name="BotAddLicenseWithItems" xml:space="preserve">
<value>ID: {0} | Status: {1} | Elementer: {2}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string, {2} will be replaced by list of granted IDs (numbers), separated by a comma</comment>
</data>
<data name="BotAlreadyRunning" xml:space="preserve">
<value>Denne bot køre allerede!</value>
</data>
<data name="BotAuthenticatorConverting" xml:space="preserve">
<value>Konvertere .maFile til ASF format...</value>
</data>
<data name="BotAuthenticatorImportFinished" xml:space="preserve">
<value>Det lykkedes at importere mobilautentificering!</value>
</data>
<data name="BotAuthenticatorInvalidDeviceID" xml:space="preserve">
<value>Din DeviceID er forkert eller eksisterer ikke!</value>
</data>
<data name="BotAuthenticatorToken" xml:space="preserve">
<value>2FA Token: {0}</value>
<comment>{0} will be replaced by generated 2FA token (string)</comment>
</data>
<data name="BotAutomaticIdlingNowPaused" xml:space="preserve">
<value>Automatisk idling er på pause!</value>
</data>
<data name="BotAutomaticIdlingNowResumed" xml:space="preserve">
<value>Automatisk idling er genoptaget!</value>
</data>
<data name="BotAutomaticIdlingPausedAlready" xml:space="preserve">
<value>Automatisk idling er allerede på pause!</value>
</data>
<data name="BotAutomaticIdlingPausedWithCountdown" xml:space="preserve">
<value>Automatisk Idling er på pause! Du har {0} til at starte et spil.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "5 minutes")</comment>
</data>
<data name="BotAutomaticIdlingResumedAlready" xml:space="preserve">
<value>Automatisk idling er genoptaget allerede!</value>
</data>
<data name="BotConnected" xml:space="preserve">
<value>Forbundet til Steam!</value>
</data>
<data name="BotDisconnected" xml:space="preserve">
<value>Afbrudt fra Steam!</value>
</data>
<data name="BotDisconnecting" xml:space="preserve">
<value>Afbryder...</value>
</data>
<data name="BotEncryptedPassword" xml:space="preserve">
<value>[{0}] kodeorder: {1}</value>
<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>Starter ikke denne bot instans fordi den er slået fra i konfigurationsfilen!</value>
</data>
<data name="BotInvalidAuthenticatorDuringLogin" xml:space="preserve">
<value>Modtaget TwoFactorCodeMismatch fejl kode {0} i streg, dette indikerer næsten altid ugyldig ASF 2FA legitimationsoplysninger, afbryder!</value>
<comment>{0} will be replaced by maximum allowed number of failed 2FA attempts</comment>
</data>
<data name="BotLoggedOff" xml:space="preserve">
<value>Loggede af fra Steam: {0}</value>
<comment>{0} will be replaced by logging off reason (string)</comment>
</data>
<data name="BotLoggedOn" xml:space="preserve">
<value>Loggede ind successfuldt!</value>
</data>
<data name="BotLoggingIn" xml:space="preserve">
<value>Logger ind...</value>
</data>
<data name="BotLogonSessionReplaced" xml:space="preserve">
<value>Denne bruger ser ud til at være i brug i en anden ASF instant, hvilket er undefineret adfærd, nægter at holde det kørende!</value>
</data>
<data name="BotLootingFailed" xml:space="preserve">
<value>Handels tilbud mislykkedes!</value>
</data>
<data name="BotLootingMasterNotDefined" xml:space="preserve">
<value>Handlen kunne ikke sendes, fordi der er ingen bruger med master tilladelse defineret!</value>
</data>
<data name="BotLootingNoLootableTypes" xml:space="preserve">
<value>Du har ikke nogen loot-typer indstillet!</value>
</data>
<data name="BotLootingNowDisabled" xml:space="preserve">
<value>Looting er nu deaktiveret!</value>
</data>
<data name="BotLootingNowEnabled" xml:space="preserve">
<value>Looting er nu aktiveret!</value>
</data>
<data name="BotLootingSuccess" xml:space="preserve">
<value>Handel tilbud sendt med succes!</value>
</data>
<data name="BotLootingTemporarilyDisabled" xml:space="preserve">
<value>Looting er midlertidigt deaktiveret!</value>
</data>
<data name="BotLootingYourself" xml:space="preserve">
<value>Du kan ikke loote dig selv!</value>
</data>
<data name="BotNoASFAuthenticator" xml:space="preserve">
<value>Dette bot har ikke ASF 2FA aktiveret! Har du glemt at importere din autentificering som ASF 2FA?</value>
</data>
<data name="BotNotConnected" xml:space="preserve">
<value>Denne bot instans er ikke forbundet!</value>
</data>
<data name="BotNotOwnedYet" xml:space="preserve">
<value>Ejes ikke endnu: {0}</value>
<comment>{0} will be replaced by query (string)</comment>
</data>
<data name="BotOwnedAlreadyWithName" xml:space="preserve">
<value>Ejes allerede: {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="BotRateLimitExceeded" xml:space="preserve">
<value>Sats er overskredet; Vi vil prøve igen efter {0} af cooldown...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Forbinder igen...</value>
</data>
<data name="BotRedeem" xml:space="preserve">
<value>Nøgle: {0} | Status: {1}</value>
<comment>{0} will be replaced by cd-key (string), {1} will be replaced by status string</comment>
</data>
<data name="BotRedeemWithItems" xml:space="preserve">
<value>Nøgle: {0} | Status: {1} | Elementer: {2}</value>
<comment>{0} will be replaced by cd-key (string), {1} will be replaced by status string, {2} will be replaced by list of key-value pairs, separated by a comma</comment>
</data>
<data name="BotRemovedExpiredLoginKey" xml:space="preserve">
<value>Fjernede udløbet login nøgle!</value>
</data>
<data name="BotStatusNotIdling" xml:space="preserve">
<value>Botten idler ikke noget.</value>
</data>
<data name="BotStatusLimited" xml:space="preserve">
<value>Botten er begrænset og kan ikke droppe nogen kort gennem idling.</value>
</data>
<data name="BotStatusConnecting" xml:space="preserve">
<value>Botten er forbundet til Steam-netværket.</value>
</data>
<data name="BotStatusNotRunning" xml:space="preserve">
<value>Botten køre ikke.</value>
</data>
<data name="BotStatusPaused" xml:space="preserve">
<value>Botten er sat på pause eller kører i manuel tilstand.</value>
</data>
<data name="BotStatusPlayingNotAvailable" xml:space="preserve">
<value>Botten bruges i øjeblikket.</value>
</data>
<data name="BotUnableToConnect" xml:space="preserve">
<value>Kan ikke forbinde til Steam: {0}</value>
<comment>{0} will be replaced by failure reason (string)</comment>
</data>
<data name="BotUnableToLogin" xml:space="preserve">
<value>Kan ikke logge ind på Steam: {0}/{1}</value>
<comment>{0} will be replaced by failure reason (string), {1} will be replaced by extended failure reason (string)</comment>
</data>
<data name="ErrorIsEmpty" xml:space="preserve">
<value>{0} er tom!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="UnusedKeys" xml:space="preserve">
<value>Ubrugte nøgler: {0}</value>
<comment>{0} will be replaced by list of cd-keys (strings), separated by a comma</comment>
</data>
<data name="WarningFailedWithError" xml:space="preserve">
<value>Mislykkedes på grund af fejl: {0}</value>
<comment>{0} will be replaced by failure reason (string)</comment>
</data>
<data name="BotConnectionLost" xml:space="preserve">
<value>Forbindelse til Steam-netværket mistede. Opretter forbindelse igen...</value>
</data>
<data name="BotAccountFree" xml:space="preserve">
<value>Kontoen er ikke længere besat: idling processen genoptages!</value>
</data>
<data name="BotAccountOccupied" xml:space="preserve">
<value>Kontoen bruges i øjeblikket: ASF vil genoptage idling når det er fri...</value>
</data>
<data name="BotAutomaticIdlingPauseTimeout" xml:space="preserve">
<value>Delt bibliotek er ikke blevet lanceret i given tidsperiode. Idling processen genoptages!</value>
</data>
<data name="BotConnecting" xml:space="preserve">
<value>Forbinder...</value>
</data>
<data name="BotHeartBeatFailed" xml:space="preserve">
<value>Afbrydelsen af klienten fejlede, afbryder denne bot instans!</value>
</data>
<data name="BotSteamDirectoryInitializationFailed" xml:space="preserve">
<value>Kunne ikke initialisere SteamDirectory: forbinder med Steam-netværket kan tage meget længere tid end normalt!</value>
</data>
<data name="BotStopping" xml:space="preserve">
<value>Stopper...</value>
</data>
<data name="ErrorBotConfigInvalid" xml:space="preserve">
<value>Din bot konfiguration er ugyldig. Kontroller indholdet af {0}, og prøv igen!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorDatabaseInvalid" xml:space="preserve">
<value>Vedvarende database kunne ikke indlæses, hvis problemet fortsætter, skal du fjerne {0} for at genskabe databasen!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="Initializing" xml:space="preserve">
<value>Initialisering af {0}...</value>
<comment>{0} will be replaced by service name that is being initialized</comment>
</data>
<data name="WarningPrivacyPolicy" xml:space="preserve">
<value>Gennemgå vores privatlivs politik sektion på wikien, hvis du er bekymret om ASF faktisk gør!</value>
</data>
<data name="Welcome" xml:space="preserve">
<value>Det ser ud som om det er din første lancering af programmet, velkommen!</value>
</data>
<data name="ErrorInvalidCurrentCulture" xml:space="preserve">
<value>Din angivne CurrentCulture er ugyldig, ConfigGenerator vil køre med en standard!</value>
</data>
<data name="TranslationIncomplete" xml:space="preserve">
<value>ASF vil forsøge at bruge din foretrukne {0} kultur, men oversættelsen i sproget er kun {1}. Måske kan du hjælpe os med at forbedre ASF oversættelse på dit sprog?</value>
<comment>{0} will be replaced by culture code, such as "en-US", {1} will be replaced by completeness percentage, such as "78.5%"</comment>
</data>
<data name="IdlingGameNotPossible" xml:space="preserve">
<value>Idling {0} ({1}) er midlertidigt deaktiveret, da ASF ikke er i stand til at spille dette spil i øjeblikket.</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="WarningIdlingGameMismatch" xml:space="preserve">
<value>ASF opdaget ID uoverensstemmelse for {0} ({1}) og bruger ID'ET for {2} i stedet.</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by game's ID (number)</comment>
</data>
<data name="BotVersion" xml:space="preserve">
<value>{0} V{1}</value>
<comment>{0} will be replaced by program's name (e.g. "ASF"), {1} will be replaced by program's version (e.g. "1.0.0.0"). This string typically has nothing to translate and you should leave it as it is, unless you need to change the format, e.g. in RTL languages.</comment>
</data>
<data name="BotAccountLocked" xml:space="preserve">
<value>Denne konto er låst, idling proces er permanent utilgængelig!</value>
</data>
<data name="BotStatusLocked" xml:space="preserve">
<value>Botten er låst og kan ikke droppe nogen kort gennem idling.</value>
</data>
<data name="ErrorFunctionOnlyInHeadlessMode" xml:space="preserve">
<value>Denne funktion er kun tilgængelig i hovedløs tilstand!</value>
</data>
<data name="BotOwnedAlready" xml:space="preserve">
<value>Ejes allerede: {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>Adgang nægtet!</value>
</data>
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Du bruger en version, der er nyere end nyeste version for din opdaterings kanal. Bemærk venligst at pre-release versioner er dedikeret til brugere, der forstår at rapportere fejl, behandle spørgsmål og give feedback - ingen teknisk support vil blive givet.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Aktuel hukommelses brug: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -351,7 +351,7 @@ StackTrace:
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to idle, {3} will be replaced by total number of cards left to idle</comment>
</data>
<data name="BotStatusIdling" xml:space="preserve">
<value>Bot sammelt Spiel: {0} ({1}, {2} Karte[n] verbleibend) von insgesamt {3} Spiel(en) ({4} Karte[n]) verbleibend zum Idlen (~{5}).</value>
<value>Bot sammelt Spiel: {0} ({1}, {2} Karte[n] verbleibend) von insgesamt {3} Spiel(en) ({4} Karte[n]) verbleibend zum Sammeln (~{5}).</value>
<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, {3} will be replaced by total number of games to idle, {4} will be replaced by total number of cards to idle, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="BotStatusIdlingList" xml:space="preserve">
@@ -690,4 +690,5 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Du benutzt eine Version, die neuer ist als die letzte veröffentlichte Version deines Aktualisierungskanals. Bitte beachte, dass vorab veröffentlichte Versionen an Benutzer gerichtet sind, welche wissen, wie man Programmfehler meldet, mit Problemen umgeht und Rückmeldung gibt - es wird keine technische Unterstützung geleistet.</value>
</data>
</root>

View File

@@ -352,7 +352,7 @@ StackTrace:
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to idle, {3} will be replaced by total number of cards left to idle</comment>
</data>
<data name="BotStatusIdling" xml:space="preserve">
<value>Bot sammelt Spiel: {0} ({1}, {2} Karte[n] verbleibend) von insgesamt {3} Spiel(en) ({4} Karte[n]) verbleibend zum Idlen (~{5}).</value>
<value>Bot sammelt Spiel: {0} ({1}, {2} Karte[n] verbleibend) von insgesamt {3} Spiel(en) ({4} Karte[n]) verbleibend zum Sammeln (~{5}).</value>
<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, {3} will be replaced by total number of games to idle, {4} will be replaced by total number of cards to idle, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
</data>
<data name="BotStatusIdlingList" xml:space="preserve">
@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Du benutzt eine Version, die neuer ist als die letzte veröffentlichte Version deines Aktualisierungskanals. Bitte beachte, dass vorab veröffentlichte Versionen an Benutzer gerichtet sind, welche wissen, wie man Programmfehler meldet, mit Problemen umgeht und Rückmeldung gibt - es wird keine technische Unterstützung geleistet.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Momentaner Arbeitsspeicherverbrauch: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -130,7 +130,10 @@
{0}</value>
<comment>{0} will be replaced by content string. Please note that this string should include newline for formatting.</comment>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<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="ErrorEarlyFatalExceptionPrint" xml:space="preserve">
<value>Εξαίρεση: {0}() {1}
@@ -395,7 +398,9 @@ StackTrace:
<value>Γίνεται συλλογή καρτών των: {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>Η λειτουργία παιχνιδιού είναι προσωρινά μη διαθέσιμη, θα δοκιμάσουμε ξανά αργότερα!</value>
</data>
<data name="StillIdling" xml:space="preserve">
<value>Ακόμα γίνεται συλλογή καρτών του: {0} ({1})</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
@@ -418,12 +423,17 @@ StackTrace:
<data name="WarningCouldNotCheckBadges" xml:space="preserve">
<value>Αδυναμία λήψης πληροφοριών εμβλημάτων, θα ξαναγίνει προσπάθεια αργότερα!</value>
</data>
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
<value>Αδυναμία ελέγχου καρτών για το: {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="BotAcceptingGift" xml:space="preserve">
<value>Αποδοχή δώρου: {0}...</value>
<comment>{0} will be replaced by giftID (number)</comment>
</data>
<data name="BotAccountLimited" xml:space="preserve">
<value>Αυτός ο λογαριασμός είναι περιορισμένος. Η συλλογή καρτών είναι μη διαθέσιμη μέχρι να καταργηθεί ο περιορισμός!</value>
</data>
<data name="BotAddLicense" xml:space="preserve">
<value>ID: {0} | Κατάσταση: {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string</comment>
@@ -477,7 +487,9 @@ StackTrace:
<value>[{0}] κωδικός: {1}</value>
<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>Δεν γίνεται εκκίνηση αυτού του bot καθώς έχει απενεργοποιηθεί στο αρχείο διαμόρφωσης!</value>
</data>
<data name="BotLoggedOff" xml:space="preserve">
<value>Έγινε αποσύνδεση από το Steam: {0}</value>
@@ -503,7 +515,9 @@ StackTrace:
<data name="BotNotConnected" xml:space="preserve">
<value>Αυτό το bot δεν έχει συνδεθεί!</value>
</data>
<data name="BotNotOwnedYet" xml:space="preserve">
<value>Δεν κατέχετε ακόμη: {0}</value>
<comment>{0} will be replaced by query (string)</comment>
@@ -583,7 +597,9 @@ StackTrace:
<data name="BotConnecting" xml:space="preserve">
<value>Σύνδεση...</value>
</data>
<data name="BotHeartBeatFailed" xml:space="preserve">
<value>Αποτυχία αποσύνδεσης προγράμματος-πελάτη. Γίνεται εγκατάλειψη αυτού του bot!</value>
</data>
<data name="BotSteamDirectoryInitializationFailed" xml:space="preserve">
<value>Αδυναμία αρχικοποίησης SteamDirectory: η σύνδεση με το δίκτυο του Steam μπορεί να διαρκέσει πολύ περισσότερο από το συνηθισμένο!</value>
</data>
@@ -594,7 +610,10 @@ StackTrace:
<value>Η διαμόρφωση του bot σας δεν είναι έγκυρη. Επαληθεύστε το περιεχόμενο του {0} και δοκιμάστε ξανά!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="ErrorDatabaseInvalid" xml:space="preserve">
<value>Αδυναμία φόρτωσης μόνιμης βάσης δεδομένων. Εάν το πρόβλημα παραμένει, αφαιρέστε το {0} για επαναδημιουργία της βάσης!</value>
<comment>{0} will be replaced by file's path</comment>
</data>
<data name="Initializing" xml:space="preserve">
<value>Εκκίνηση {0}...</value>
<comment>{0} will be replaced by service name that is being initialized</comment>
@@ -640,5 +659,11 @@ StackTrace:
<data name="ErrorAccessDenied" xml:space="preserve">
<value>Δεν επιτρέπεται η πρόσβαση!</value>
</data>
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Χρησιμοποιείτε μια έκδοση η οποία είναι νεότερη από την τελευταία έκδοση που κυκλοφόρησε για το κανάλι ενημερώσεών σας. Παρακαλούμε να θυμάστε ότι οι εκδόσεις που δεν έχουν κυκλοφορήσει ακόμη προορίζονται για χρήστες που γνωρίζουν πώς να αναφέρουν σφάλματα, να αντιμετωπίζουν προβλήματα και να στέλνουν σχόλια - δεν θα σας παρέχεται τεχνική υποστήριξη.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Τρέχουσα χρήση μνήμης: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -690,4 +690,5 @@ Trazo de pila:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Está utilizando una versión que es más reciente que la última versión liberada para su canal de actualización. Por favor, tenga en cuenta que las versiones preliminares están dedicadas a usuarios que saben cómo reportar errores, tratar con problemas y dar sus comentarios - no se dará soporte técnico.</value>
</data>
</root>

View File

@@ -427,4 +427,5 @@
</root>

View File

@@ -691,4 +691,5 @@ StackTrace :
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Vous utilisez une version qui est plus récente que la dernière version pour votre canal de mise à jour. Veuillez noter que pré-versions sont réservées aux utilisateurs qui savent comment signaler un bug, de traiter des questions et donnent vos commentaires - aucun support technique ne sera donnée.</value>
</data>
</root>

View File

@@ -691,4 +691,8 @@ StackTrace :
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Vous utilisez une version qui est plus récente que la dernière version pour votre canal de mise à jour. Veuillez noter que les pré-versions sont réservées aux utilisateurs qui savent comment signaler un bogue, gérer les soucis et donner un retour - aucun support technique ne sera fourni.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Mémoire actuellement utilisée : {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -518,4 +518,5 @@ StackTrace:
</root>

View File

@@ -316,6 +316,7 @@
</root>

View File

@@ -678,4 +678,5 @@ StackTrace: {2}</value>
<value>Hozzáférés megtagadva!</value>
</data>
</root>

View File

@@ -121,7 +121,10 @@
<value>Menerima Pertukaran: {0}</value>
<comment>{0} will be replaced by trade number</comment>
</data>
<data name="AutoUpdateCheckInfo" xml:space="preserve">
<value>ASF akan memeriksa versi baru setiap {0} secara otomatis.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "24 hours")</comment>
</data>
<data name="Content" xml:space="preserve">
<value>Konten: {0}</value>
<comment>{0} will be replaced by content string. Please note that this string should include newline for formatting.</comment>
@@ -472,7 +475,10 @@
<data name="BotAutomaticIdlingPausedAlready" xml:space="preserve">
<value>Idling otomatis sudah ditunda sebelumnya!</value>
</data>
<data name="BotAutomaticIdlingPausedWithCountdown" xml:space="preserve">
<value>Idling otomatis sekarang dihentikan! Anda memiliki {0} untuk memulai permainan.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "5 minutes")</comment>
</data>
<data name="BotAutomaticIdlingResumedAlready" xml:space="preserve">
<value>Idling otomatis sudah dilanjuntkan sebelumnya!</value>
</data>
@@ -547,7 +553,10 @@
<value>Yang sudah dimiliki: {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="BotRateLimitExceeded" xml:space="preserve">
<value>Melebihi batas; kami akan mencoba lagi setelah menunggu selama {0}...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Menyambungkan kembali...</value>
</data>
@@ -677,5 +686,11 @@
<data name="ErrorAccessDenied" xml:space="preserve">
<value>Akses ditolak!</value>
</data>
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Anda menggunakan versi yang lebih baru daripada versi terbaru yang dirilis untuk saluran pembaruan Anda. Harap dicatat bahwa pra-rilis diperuntukkan untuk pengguna yang tahu bagaimana untuk melaporkan bug, berurusan dengan isu-isu dan memberikan umpan balik - tidak akan ada pemberian dukungan teknis.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Penggunaan memori saat ini: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -689,4 +689,5 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Stai utilizzando una versione più recente dell'ultima versione rilasciata per il tuo canale di aggiornamento. Sei pregato di notare che le versioni pre-release sono dedicate agli utenti che sono capaci di segnalare bug, affrontare problemi e lasciare feedback - non sarà dato nessun supporto tecnico.</value>
</data>
</root>

View File

@@ -688,4 +688,8 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>あなたの指定した更新チャンネルよりも新しいバージョンを使用しています。プレリリースバージョンはバグの報告と問題への対処、フィードバックのできるユーザー向けであることに留意してください - テクニカルサポートは行われません。</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>現在のメモリ使用量: {0} MB。</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -693,4 +693,5 @@ ASF 실행 파일의 이름이 적절한지 확인하시기 바랍니다!</value
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>마지막으로 릴리즈된 버전보다 최신 버전을 사용 중입니다. 시험판 버전은 버그 리포트, 문제 해결, 피드백을 제공하는 법을 아는 유저에게만 제공됩니다. - 기술 지원은 제공되지 않습니다.</value>
</data>
</root>

View File

@@ -688,4 +688,8 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Jūs naudojate versija kuri yra naujesnė nei paskutinė išleista versija jūsų naujinimo kanale. Atkreipkite dėmesį, kad išankstinio išleidimo versija yra skirta vartotojams, kurie žino, kaip pranešti apie klaidas, problemas - techninė parama nebus suteikiama.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Šiuo metu naudojama atminties: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -279,6 +279,7 @@
</root>

View File

@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Je gebruikt een nieuwere versie dan de laatste versie van je update kanaal. Hou er rekening mee dat pre-release versies alleen geschikt zijn voor gebruikers die weten hoe ze bugs moeten rapporteren, kunnen omgaan met problemen en feedback kunnen geven. Er wordt geen technische ondersteuning geboden.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Geheugen in gebruik: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Je gebruikt een nieuwere versie dan de laatste versie van je update kanaal. Hou er rekening mee dat pre-release versies alleen geschikt zijn voor gebruikers die weten hoe ze bugs moeten rapporteren, kunnen omgaan met problemen en feedback kunnen geven. Er wordt geen technische ondersteuning geboden.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Geheugen in gebruik: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -344,4 +344,5 @@
</root>

View File

@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Używasz wersji, która jest nowsza niż aktualna wersja dostępna na Twoim kanale aktualizacyjnym. Pamiętaj, że wersje wstępne są przeznaczone dla użytkowników, którzy wiedzą jak zgłaszać błędy, rozwiązywać problemy i przesyłać opinie - nie świadczymy dla nich pomocy technicznej.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Aktualne wykorzystanie pamięci: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -689,6 +689,7 @@ StackTrace:
<value>Acesso negado!</value>
</data>
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Você está usando uma versão que é mais nova que a última lançada para seu canal de atualizações. Por favor, tenha em mente que versões não finalizadas são dedicadas aos usuários que sabem como reportar bugs, lidar com problemas e dar seus comentários - Nenhum suporte técnico será dado.</value>
<value>Você está usando uma versão que é mais nova que a última lançada para seu canal de atualizações. Por favor, tenha em mente que versões não finalizadas são dedicadas à usuários que sabem como reportar bugs, lidar com problemas e dar feedback - Nenhum suporte técnico será dado.</value>
</data>
</root>

View File

@@ -681,4 +681,5 @@ inválidas, abortando!</value>
<value>Acesso negado!</value>
</data>
</root>

View File

@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>You're using a version that is newer than latest released version for your update channel. Please note that pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Current memory usage: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -691,4 +691,5 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Folosești o versiune care este mai nouă față de ultima versiune lansată pentru canalul tău de actualizare. Te rugăm să reții că versiunile preliminare sunt dedicate utilizatorilor care știu cum să raporteze defecțiuni, să abordeze problemele și să ofere feedback - nu va fi oferit suport tehnic.</value>
</data>
</root>

View File

@@ -691,4 +691,5 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Вы используете версию, которая новее, чем последняя версия для выбранного канала обновлений. Помните, что пре-релизные версии предназначены для тех пользователей, которые знают, как сообщать о багах, справляться с ошибками и давать отзывы - техническая поддержка оказана не будет.</value>
</data>
</root>

View File

@@ -691,4 +691,8 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Je používaná verzia, ktorá je novšia ako posledná vydaná verzia pre tento aktualizačný kanál. Verzie pred vydaním sú určené pre užívateľov, ktorí vedia nahlasovať chyby, riešiť problémy a poskytovať spätnú väzbu - pre nich nie je poskytovaná žiadna technická podpora.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Aktuálne použitie pamäte: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -551,4 +551,5 @@ StackTrace:
</root>

View File

@@ -288,6 +288,7 @@
</root>

View File

@@ -692,4 +692,5 @@ StackTrace:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Du använder en version som är nyare än den senast släppta versionen i din uppdateringskanal. Vänligen notera att förhandsversioner är avsedda för användare med förmågan att rapportera buggar, handskas med eventuella problem och viljan att ge feedback - Ingen teknisk support kommer att ges.</value>
</data>
</root>

View File

@@ -279,6 +279,7 @@
</root>

View File

@@ -691,4 +691,8 @@ Yığın izleme:
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Güncelleme kanalınız için yayınlanmış en son sürümden daha yeni bir sürüm kullanıyorsunuz. Lütfen ön yayın sürümlerinin, hata raporlamayı, sorunlarla başa çıkmayı ve geribildirim yapmayı bilen kişiler için olduğunu unutmayın. Teknik destek verilmeyecektir.</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>Geçerli bellek kullanımı: {0} MB.</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -691,4 +691,5 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>Ви користуєтеся версією, яка новіша за останню версію у цьому каналі оновлення. Будь ласка, зверніть увагу, що пре-релізні версіі призначені для користувачів які вміють доповідати про помилки, вирішувати питання та надавати зворотній зв'язок - технічна підтримка не надається.</value>
</data>
</root>

View File

@@ -640,4 +640,5 @@ StackTrace:
</data>
</root>

View File

@@ -688,4 +688,8 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>您正使用最新的测试版本此版本是用于汇报bug使用的所以此版本将不会提供技术支持。</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>当前内存用量: {0} MB。</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -688,4 +688,8 @@
<data name="WarningPreReleaseVersion" xml:space="preserve">
<value>您目前使用的版本高於最新發布的版本。請注意預覽版是專門給了解如何回報bug、處理問題並提供回饋的使用者 - 並不提供技術支援。</value>
</data>
<data name="BotStats" xml:space="preserve">
<value>當前記憶體使用量: {0} MB。</value>
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
</data>
</root>

View File

@@ -427,26 +427,28 @@ namespace ArchiSteamFarm {
ShutdownResetEvent.Set();
}
private static async void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args) {
if (args?.ExceptionObject == null) {
ASF.ArchiLogger.LogNullError(nameof(args) + " || " + nameof(args.ExceptionObject));
private static async void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) {
if (e?.ExceptionObject == null) {
ASF.ArchiLogger.LogNullError(nameof(e) + " || " + nameof(e.ExceptionObject));
return;
}
ASF.ArchiLogger.LogFatalException((Exception) args.ExceptionObject);
await Task.Delay(5000).ConfigureAwait(false);
ASF.ArchiLogger.LogFatalException((Exception) e.ExceptionObject);
await Task.Delay(1000).ConfigureAwait(false); // For writing stuff to logs
await Exit(1).ConfigureAwait(false);
}
private static void UnobservedTaskExceptionHandler(object sender, UnobservedTaskExceptionEventArgs args) {
if (args?.Exception == null) {
ASF.ArchiLogger.LogNullError(nameof(args) + " || " + nameof(args.Exception));
private static void UnobservedTaskExceptionHandler(object sender, UnobservedTaskExceptionEventArgs e) {
if (e?.Exception == null) {
ASF.ArchiLogger.LogNullError(nameof(e) + " || " + nameof(e.Exception));
return;
}
ASF.ArchiLogger.LogFatalException(args.Exception);
ASF.ArchiLogger.LogFatalException(e.Exception);
// Normally we should abort the application here, but many tasks are in fact failing in SK2 code which we can't easily fix
// Thanks Valve.
e.SetObserved();
}
[Flags]

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.1.6";
internal const string VersionNumber = "2.3.2.0";
internal static readonly Version Version = Assembly.GetEntryAssembly().GetName().Version;
}

View File

@@ -22,7 +22,6 @@
*/
/*
using System;
using System.Collections.Generic;
using System.Threading;
@@ -31,53 +30,36 @@ using HtmlAgilityPack;
namespace ArchiSteamFarm {
internal sealed class SteamSaleEvent : IDisposable {
private static readonly DateTime SaleEndingDateUtc = new DateTime(2017, 1, 2, 18, 0, 0, DateTimeKind.Utc);
private const byte MaxSingleQueuesDaily = 3;
private readonly Bot Bot;
private readonly Timer SteamAwardsTimer;
private readonly Timer SteamDiscoveryQueueTimer;
internal SteamSaleEvent(Bot bot) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
Bot = bot ?? throw new ArgumentNullException(nameof(bot));
Bot = bot;
if (DateTime.UtcNow >= SaleEndingDateUtc) {
if (!Debugging.IsDebugBuild) {
return;
}
SteamAwardsTimer = new Timer(
async e => await VoteForSteamAwards().ConfigureAwait(false),
null,
TimeSpan.FromMinutes(1 + 0.2 * Bot.Bots.Count), // Delay
TimeSpan.FromHours(6.1) // Period
);
SteamDiscoveryQueueTimer = new Timer(
async e => await ExploreDiscoveryQueue().ConfigureAwait(false),
null,
TimeSpan.FromMinutes(1 + 0.2 * Bot.Bots.Count), // Delay
TimeSpan.FromHours(6.1) // Period
TimeSpan.FromHours(8.1) // Period
);
}
public void Dispose() {
SteamAwardsTimer?.Dispose();
SteamDiscoveryQueueTimer?.Dispose();
}
private async Task ExploreDiscoveryQueue() {
if (DateTime.UtcNow >= SaleEndingDateUtc) {
if (!Bot.IsConnectedAndLoggedOn) {
return;
}
if (!Bot.ArchiWebHandler.Ready) {
return;
}
for (byte i = 0; (i < 3) && !(await IsDiscoveryQueueEmpty().ConfigureAwait(false)).GetValueOrDefault(); i++) {
for (byte i = 0; (i < MaxSingleQueuesDaily) && (await IsDiscoveryQueueAvailable().ConfigureAwait(false)).GetValueOrDefault(); i++) {
HashSet<uint> queue = await Bot.ArchiWebHandler.GenerateNewDiscoveryQueue().ConfigureAwait(false);
if (queue == null) {
break;
@@ -89,17 +71,13 @@ namespace ArchiSteamFarm {
continue;
}
i = byte.MaxValue;
i = MaxSingleQueuesDaily;
break;
}
}
}
private async Task<bool?> IsDiscoveryQueueEmpty() {
if (!Bot.ArchiWebHandler.Ready) {
return null;
}
private async Task<bool?> IsDiscoveryQueueAvailable() {
HtmlDocument htmlDocument = await Bot.ArchiWebHandler.GetDiscoveryQueuePage().ConfigureAwait(false);
if (htmlDocument == null) {
return null;
@@ -107,81 +85,18 @@ namespace ArchiSteamFarm {
HtmlNode htmlNode = htmlDocument.DocumentNode.SelectSingleNode("//div[@class='subtext']");
if (htmlNode == null) {
// No cards for exploring the queue available
return true;
// Valid, no cards for exploring the queue available
return false;
}
string text = htmlNode.InnerText;
if (!string.IsNullOrEmpty(text)) {
// It'd make more sense to check "Come back tomorrow", but it might not cover out-of-the-event queue
return !text.StartsWith("You can get ", StringComparison.Ordinal);
// It'd make more sense to check against "Come back tomorrow", but it might not cover out-of-the-event queue
return text.StartsWith("You can get ", StringComparison.Ordinal);
}
Bot.ArchiLogger.LogNullError(nameof(text));
return null;
}
private async Task VoteForSteamAwards() {
if (DateTime.UtcNow >= SaleEndingDateUtc) {
return;
}
if (!Bot.ArchiWebHandler.Ready) {
return;
}
HtmlDocument htmlDocument = await Bot.ArchiWebHandler.GetSteamAwardsPage().ConfigureAwait(false);
HtmlNodeCollection nominationsNodes = htmlDocument?.DocumentNode.SelectNodes("//div[@class='vote_nominations store_horizontal_autoslider']");
if (nominationsNodes == null) {
// Event ended, error or likewise
return;
}
foreach (HtmlNode nominationsNode in nominationsNodes) {
HtmlNode myVoteNode = nominationsNode.SelectSingleNode("./div[@class='vote_nomination your_vote']");
if (myVoteNode != null) {
// Already voted
continue;
}
string voteIDText = nominationsNode.GetAttributeValue("data-voteid", null);
if (string.IsNullOrEmpty(voteIDText)) {
Bot.ArchiLogger.LogNullError(nameof(voteIDText));
return;
}
byte voteID;
if (!byte.TryParse(voteIDText, out voteID) || (voteID == 0)) {
Bot.ArchiLogger.LogNullError(nameof(voteID));
return;
}
HtmlNodeCollection voteNodes = nominationsNode.SelectNodes("./div[@class='vote_nomination ']");
if (voteNodes == null) {
Bot.ArchiLogger.LogNullError(nameof(voteNodes));
return;
}
// Random a game we'll actually vote for, we don't want to make GabeN angry by rigging votes...
HtmlNode voteNode = voteNodes[Utilities.RandomNext(voteNodes.Count)];
string appIDText = voteNode.GetAttributeValue("data-vote-appid", null);
if (string.IsNullOrEmpty(appIDText)) {
Bot.ArchiLogger.LogNullError(nameof(appIDText));
return;
}
uint appID;
if (!uint.TryParse(appIDText, out appID) || (appID == 0)) {
Bot.ArchiLogger.LogNullError(nameof(appID));
return;
}
await Bot.ArchiWebHandler.SteamAwardsVote(voteID, appID).ConfigureAwait(false);
}
}
}
}
*/
}

View File

@@ -29,6 +29,7 @@ using System.Globalization;
using System.Linq;
using System.Net;
using System.Runtime.CompilerServices;
using System.Text;
using Humanizer;
namespace ArchiSteamFarm {
@@ -108,7 +109,39 @@ namespace ArchiSteamFarm {
yield return item;
}
internal static string ToHumanReadable(this TimeSpan timeSpan) => timeSpan.Humanize(3);
internal static string ToHumanReadable(this TimeSpan timeSpan) {
// TODO: Remove this awful hack once we get rid of ILRepack in .NET core, Humanize() should always work
try {
return timeSpan.Humanize(3);
} catch (ArgumentException) {
StringBuilder result = new StringBuilder();
if (timeSpan.Days > 0) {
result.Append(timeSpan.Days + " " + (timeSpan.Days > 1 ? "days" : "day") + ", ");
}
if (timeSpan.Hours > 0) {
result.Append(timeSpan.Hours + " " + (timeSpan.Hours > 1 ? "hours" : "hour") + ", ");
}
if (timeSpan.Minutes > 0) {
result.Append(timeSpan.Minutes + " " + (timeSpan.Minutes > 1 ? "minutes" : "minute") + ", ");
}
if (timeSpan.Seconds > 0) {
result.Append(timeSpan.Seconds + " " + (timeSpan.Seconds > 1 ? "seconds" : "second") + ", ");
}
if (result.Length == 0) {
return "0 seconds";
}
// Get rid of last comma + space
result.Length -= 2;
return result.ToString();
}
}
private static string[] GetArgs(this string[] args, byte argsToSkip = 1) {
if (args.Length < argsToSkip) {

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="1.5.1" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.0.10" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.5.0-beta5" targetFramework="net461" />
<package id="Costura.Fody" version="1.6.2" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.1.0" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.5.0-beta8" targetFramework="net461" />
<package id="Humanizer" version="2.2.0" targetFramework="net461" />
<package id="Humanizer.Core" version="2.2.0" targetFramework="net461" />
<package id="Humanizer.Core.af" version="2.2.0" targetFramework="net461" />
@@ -51,7 +51,7 @@
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net461" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta07" targetFramework="net461" />
<package id="protobuf-net" version="2.2.0" targetFramework="net461" />
<package id="protobuf-net" version="2.2.1" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="2.0.0-Alpha4" targetFramework="net461" />
<package id="System.ValueTuple" version="4.4.0-preview1-25305-02" targetFramework="net461" />

View File

@@ -14,7 +14,7 @@ All issues related to wiki, especially correcting mistakes, getting rid of outda
Before reporting a bug you should carefully check if the "bug" you're encountering is in fact ASF bug and not technical issue that is answered in the **[FAQ](https://github.com/JustArchi/ArchiSteamFarm/wiki/FAQ#issues)** or in other place on the wiki. Typically technical issue is **intentional ASF behaviour which might not match your expectations**, e.g. failing to send or accept steam trades - logic for accepting and sending steam trades is outside of the ASF, as stated in the FAQ, and there is no bug related to that because it's up to Steam to accept such request, or not. If you're not sure if you're encountering ASF bug or technical issue, please use **[ASF chat](https://gitter.im/JustArchi/ArchiSteamFarm)** or **[Steam group](http://steamcommunity.com/groups/ascfarm/discussions/1/)** and avoid GitHub issues.
Regarding ASF bugs - Posting a log is **mandatory**, regardless if it contains information that is relevant or not. You're allowed to make small modifications such as changing bot names to something more generic, but you should not be doing anything else. You want us to fix the bug you've encountered, then help us instead of making it harder - we're not being paid for that, and we're not forced to fix the bug you've encountered. Include as much relevant info as possible - if bug is reproducable, when it happens, if it's a result of a command - which one, does it happen always or only sometimes, with one account or all of them - everything you consider appropriate, that could help us reproduce the bug and fix it. The more information you include, the higher the chance of bug getting fixed. **If nobody is able to reproduce your bug, there is also no way of blindly fixing it**, so it's in your best interest to **make us run into your bug**.
Regarding ASF bugs - Posting a log is **mandatory**, regardless if it contains information that is relevant or not. You're allowed to make small modifications such as changing bot names to something more generic, but you should not be doing anything else. You want us to fix the bug you've encountered, then help us instead of making it harder - we're not being paid for that, and we're not forced to fix the bug you've encountered. Include as much relevant info as possible - if bug is reproducible, when it happens, if it's a result of a command - which one, does it happen always or only sometimes, with one account or all of them - everything you consider appropriate, that could help us reproduce the bug and fix it. The more information you include, the higher the chance of bug getting fixed. **If nobody is able to reproduce your bug, there is also no way of blindly fixing it**, so it's in your best interest to **make us run into your bug**.
It would also be cool if you could reproduce your issue on latest pre-release (and not stable) version, as this is most recent codebase that might include not-yet-released fix for your issue already. Of course, that is not mandatory, as ASF offers support for both latest pre-release as well as latest stable versions, but it's entirely possible that your bug is already fixed, just not released yet.

View File

@@ -46,6 +46,10 @@
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=1.6.2.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.1.6.2\lib\dotnet\Costura.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="GenericDictionaryEditor, Version=1.1.0.0, Culture=neutral, PublicKeyToken=7f1cce5280f1f8eb, processorArchitecture=MSIL">
<HintPath>..\packages\GenDictEdit.1.1.0\lib\net20\GenericDictionaryEditor.dll</HintPath>
</Reference>
@@ -187,8 +191,8 @@
. "$(SolutionDir)mono_envsetup.sh"
fi
if [ -n "$MONO_FACADES" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:$MONO_FACADES" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-ConfigGenerator.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
if [ -n "$MONO_API_PATH" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:${MONO_API_PATH}" "/lib:${MONO_API_PATH}/Facades" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-ConfigGenerator.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
else
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-ConfigGenerator.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
fi
@@ -201,11 +205,12 @@
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets'))" />
</Target>
<Import Project="..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" />
<Import Project="..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" />
<Import Project="..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" />
<Import Project="..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'WITHOUT_ILREPACK' AND Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@@ -120,43 +120,120 @@
<data name="CategoryAccess" xml:space="preserve">
<value>Adgang</value>
</data>
<data name="CategoryCore" xml:space="preserve">
<value>Core</value>
<data name="CategoryAdvanced" xml:space="preserve">
<value>Avanceret</value>
</data>
<data name="CategoryCore" xml:space="preserve">
<value>Kerne</value>
</data>
<data name="CategoryDebugging" xml:space="preserve">
<value>Fejlsøgning</value>
</data>
<data name="CategoryPerformance" xml:space="preserve">
<value>Ydeevne</value>
</data>
<data name="CategoryUpdates" xml:space="preserve">
<value>Opdateringer</value>
</data>
<data name="ConfirmRemoval" xml:space="preserve">
<value>Ønsker du at fjerne denne konfiguration?</value>
</data>
<data name="ErrorBotNameEmpty" xml:space="preserve">
<value>Dit bot navn er tomt!</value>
</data>
<data name="ErrorCantRemoveGlobalConfig" xml:space="preserve">
<value>Du kan ikke fjerne global konfiguration!</value>
</data>
<data name="ErrorCantRenameGlobalConfig" xml:space="preserve">
<value>Du kan ikke omdøbe global konfiguration!</value>
</data>
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
<value>Konfigurationsmappe kunne ikke blive fundet!</value>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<value>Konfigureret {0} egenskab er forkert: {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">
<value>Din angivne CurrentCulture er ugyldig, ConfigGenerator vil køre med en standard!</value>
</data>
<data name="ErrorNameAlreadyUsed" xml:space="preserve">
<value>Dette navn er allerede i brug!</value>
<comment>This happens e.g. when user wants to create a bot with name that exists already</comment>
</data>
<data name="ErrorNameReserved" xml:space="preserve">
<value>Dette navn er reserveret!</value>
<comment>This happens e.g. when user wants to create a bot with reserved name, such as "ASF"</comment>
</data>
<data name="ErrorObjectIsNull" xml:space="preserve">
<value>{0} er nul!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="ErrorVersionMismatch" xml:space="preserve">
<value>Du har forsøgt at bruge en ugyldig ConfigGenerator version til din ASF!
ASF: {0} | ConfigGenerator: {1}...
Venligst brug en ConfigGenerator version der passer til din ASF binær fil. Du vil blive omdirigeret til en passende udgave...</value>
<comment>{0} will be replaced by ASF version (string), {1} will be replaced by ConfigGenerator version (string). Please note that this string should include newlines for formatting.</comment>
</data>
<data name="New" xml:space="preserve">
<value>Ny</value>
<comment>This is used as MessageBox title</comment>
</data>
<data name="Removal" xml:space="preserve">
<value>Fjernelse</value>
<comment>This is used as MessageBox title</comment>
</data>
<data name="Rename" xml:space="preserve">
<value>Omdøb</value>
<comment>This is used as MessageBox title</comment>
</data>
<data name="TutorialBotFormEnabled" xml:space="preserve">
<value>Fremragende! Nu er din bot instans aktiveret. Faktisk, det var alt, hvad du havde brug for at gøre for at bruge denne bot i ASF, men du burde konfigurere mindst 2 flere konfigurationsegenskaber: {0} og {1}. Hvis du vil fortsætte selvstudiet, kan du gøre dette. Husk at henvise til wikien, hvis du er usikker på hvordan en givet egenskab skal være konfigureret, eller hvis du har brug for yderligere hjælp.</value>
<comment>{0} will be replaced by "SteamLogin" configuration property, {1} will be replaced by "SteamPassword" configuration property</comment>
</data>
<data name="TutorialBotFormReady" xml:space="preserve">
<value>Din ASF er nu klar! Kør ASF.exe filen og hvis du har indtastet alt korrekt, bør du bemærke at ASF logger ind og begynder at idle. Hvis du har SteamGuard eller to-faktor autentificering aktiveret, beder ASF dig om disse legitimationsoplysninger under kørsel.</value>
</data>
<data name="TutorialFinished" xml:space="preserve">
<value>Tillykke! Du har gjort alt, der er nødvendigt for at gøre ASF anvendelig, dette afslutter også den tutorial, som vi forberedte til dig. Det anbefales stærkt at du læser hele konfigurationsafsnittet på wikien nu, da ASF har nogle virkelig smarte funktioner til at konfigurere, såsom offline farming eller tuning ASF for at anvende den mest effektive idle algoritme til din konto. Alt dette er valgfri, og du er fri til at lukke vores konfigurator, når som helst du ønsker. Vi håber, at du vil nyde programmet som vi kodet for dig!</value>
</data>
<data name="TutorialMainFormBotsManagementButtons" xml:space="preserve">
<value>Øverst i vinduet kan du mærke aktuelt indlæste konfigurationer, og 3 ekstra knapper til at fjerne [-], omdøbning [~] og tilføje nye [+].</value>
<comment>If possible, try to keep visual representation of buttons: [-], [~] and [+]</comment>
</data>
<data name="TutorialMainFormConfigurationWiki" xml:space="preserve">
<value>Bemærk venligst at alle oplysninger om tilgængelige konfigurations egenskaber, herunder beskrivelse, formål, og accepterede værdier, er tilgængelige på vores GitHub wiki. Venligst brug den som reference.</value>
</data>
<data name="TutorialMainFormConfigurationWindow" xml:space="preserve">
<value>Midt i vinduet kan du konfigurere alle konfigurations egenskaber, der er tilgængelige for dig, for dine aktuelt valgte konfiguration.</value>
</data>
<data name="TutorialMainFormFinished" xml:space="preserve">
<value>Okay, lad os begynde at konfigurere vores ASF. Klik på plustegn [+] knappen for at tilføje din første steam konto!</value>
<comment>If possible, try to keep visual representation of [+] button</comment>
</data>
<data name="TutorialMainFormHelpButton" xml:space="preserve">
<value>I øverste højre hjørne kan du finde hjælp-knappen [?], hvilket vil omdirigere dig til ASF wikien for mere information.</value>
<comment>If possible, try to keep visual representation of [?] button</comment>
</data>
<data name="TutorialMainFormShown" xml:space="preserve">
<value>Dette er den primære ASF ConfigGenerator skærm, det er virkelig let at bruge!</value>
</data>
<data name="TutorialNewBotFormFinished" xml:space="preserve">
<value>Som du kan se, er din bot nu klar til at blive konfigureret! Første ting, du måske ønsker at gøre er at skifte {0} egenskab fra false til true, prøv det!</value>
<comment>{0} will be replaced by name of the configuration property ("Enabled")</comment>
</data>
<data name="TutorialNewBotFormShown" xml:space="preserve">
<value>Godt job! Du vil blive bedt om din bot navn nu. Et godt eksempel ville være et Brugernavn, som du bruger til din steam konto, du er ved at konfigurere, eller et andet navn efter eget valg, som vil være let for dig at forbinde med den bot, der bliver konfigureret.</value>
</data>
<data name="TutorialStart" xml:space="preserve">
<value>Velkommen! Jeg har bemærket, at du bruger ASF ConfigGenerator for første gang, så lad mig hjælpe dig lidt.</value>
</data>
<data name="UserInputBotName" xml:space="preserve">
<value>Angiv venligst et nyt bot navn: </value>
<comment>Please note that this translation should end with space</comment>
</data>
<data name="WarningConfigPropertyModified" xml:space="preserve">
<value>{0} er blevet sat til: {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

@@ -150,8 +150,13 @@
<data name="ErrorConfigDirectoryNotFound" xml:space="preserve">
<value>Δεν ήταν δυνατή η εύρεση του φακέλου διαμορφώσεων!</value>
</data>
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
<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">
<value>Η παρεχόμενη τιμή CurrentCulture δεν είναι έγκυρη, το ConfigGenerator θα συνεχίσει να εκτελείται με την προεπιλεγμένη!</value>
</data>
<data name="ErrorNameAlreadyUsed" xml:space="preserve">
<value>Αυτό το όνομα χρησιμοποιείται ήδη!</value>
<comment>This happens e.g. when user wants to create a bot with name that exists already</comment>
@@ -164,7 +169,14 @@
<value>Το {0} είναι null!</value>
<comment>{0} will be replaced by object's name</comment>
</data>
<data name="ErrorVersionMismatch" xml:space="preserve">
<value>Προσπαθήσατε να χρησιμοποιήσετε μια μη έγκυρη έκδοση του ConfigGenerator για το ASF σας!
ASF: {0} | ConfigGenerator: {1}
Παρακαλώ χρησιμοποιήστε την ίδια έκδοση ConfigGenerator με το εκτελέσιμο αρχείο ASF σας. Θα μεταφερθείτε στη σωστή έκδοση...</value>
<comment>{0} will be replaced by ASF version (string), {1} will be replaced by ConfigGenerator version (string). Please note that this string should include newlines for formatting.</comment>
</data>
<data name="New" xml:space="preserve">
<value>Νέο</value>
<comment>This is used as MessageBox title</comment>
@@ -182,11 +194,22 @@
<data name="TutorialFinished" xml:space="preserve">
<value>Συγχαρητήρια! Έχετε κάνει ό,τι απαιτείται για τη χρήση του ASF και εδώ επίσης τελειώνει το βοήθημα που ετοιμάσαμε για εσάς. Συνιστάται ιδιαίτερα να διαβάσετε ολόκληρη την ενότητα διαμόρφωσης στο wiki τώρα, μιας και το ASF σας προσφέρει μερικά πραγματικά καλοφτιαγμένα χαρακτηριστικά για να ρυθμίσετε, όπως την offline συλλογή καρτών ή την ρύθμιση του ASF χρησιμοποιώντας τον πιο αποδοτικό αλγόριθμο για τον λογαριασμό σας. Όλα αυτά όμως είναι προαιρετικά, μπορείτε να κλείσετε το εργαλείο διαμόρφωσης όποτε επιθυμείτε. Ελπίζουμε ότι θα απολαύσετε το λογισμικό που αναπτύξαμε για εσάς!</value>
</data>
<data name="TutorialMainFormBotsManagementButtons" xml:space="preserve">
<value>Στην κορυφή του παραθύρου μπορείτε να δείτε τις τρέχουσες φορτωμένες διαμορφώσεις και 3 επιπλέον κουμπιά για αφαίρεση [-], μετονομασία [~] και προσθήκη νέων [+].</value>
<comment>If possible, try to keep visual representation of buttons: [-], [~] and [+]</comment>
</data>
<data name="TutorialMainFormConfigurationWindow" xml:space="preserve">
<value>Στη μέση του παραθύρου μπορείτε να ρυθμίσετε όλες τις ιδιότητες της διαμόρφωσης που είναι διαθέσιμες σε εσάς, για την τρέχουσα επιλεγμένη διαμόρφωση.</value>
</data>
<data name="TutorialMainFormFinished" xml:space="preserve">
<value>Λοιπόν, ας αρχίσουμε τη διαμόρφωση του ASF μας. Πατήστε το κουμπί [+] για να προσθέσετε τον πρώτο λογαριασμό Steam σας!</value>
<comment>If possible, try to keep visual representation of [+] button</comment>
</data>
<data name="TutorialMainFormHelpButton" xml:space="preserve">
<value>Στην επάνω δεξιά γωνία μπορείτε να βρείτε το κουμπί βοήθειας [?] το οποίο θα σας μεταφέρει στο wiki του ASF για περισσότερες πληροφορίες.</value>
<comment>If possible, try to keep visual representation of [?] button</comment>
</data>
<data name="TutorialMainFormShown" xml:space="preserve">
<value>Αυτή είναι η κεντρική οθόνη του ASF ConfigGenerator. Είναι πραγματικά εύκολο στη χρήση!</value>
</data>

View File

@@ -210,7 +210,7 @@ Lütfen ASF sürümüne uygun ConfigGenerator kullanın. Uygun olan sürüme yö
<value>Pencerenin orta kısmında, seçili hesabınız için yapabileceğiniz tüm yapılandırmalar mevcuttur.</value>
</data>
<data name="TutorialMainFormFinished" xml:space="preserve">
<value>Tamam, haydi ASF'yi yapılandırmaya başlayalım. İlk olarak Steam hesabınız eklemek için artı [+] düğmesine basın!</value>
<value>Tamam, haydi ASF'yi yapılandırmaya başlayalım. İlk olarak Steam hesabınızı eklemek için artı [+] düğmesine basın!</value>
<comment>If possible, try to keep visual representation of [+] button</comment>
</data>
<data name="TutorialMainFormHelpButton" xml:space="preserve">

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="1.5.1" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.0.10" targetFramework="net461" developmentDependency="true" />
<package id="Costura.Fody" version="1.6.2" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.1.0" targetFramework="net461" developmentDependency="true" />
<package id="GenDictEdit" version="1.1.0" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />

View File

@@ -12,7 +12,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="protobuf-net" publicKeyToken="257b51d87d2e4d67" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
<bindingRedirect oldVersion="0.0.0.0-2.2.1.0" newVersion="2.2.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -44,8 +44,12 @@
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=1.6.2.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>..\packages\Costura.Fody.1.6.2\lib\dotnet\Costura.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.5.0.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.5.0-beta5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<HintPath>..\packages\HtmlAgilityPack.1.5.0-beta8\lib\Net45\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="Humanizer, Version=2.2.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\packages\Humanizer.Core.2.2.0\lib\netstandard1.0\Humanizer.dll</HintPath>
@@ -72,8 +76,8 @@
<HintPath>..\packages\NLog.Windows.Forms.4.2.3\lib\net35\NLog.Windows.Forms.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="protobuf-net, Version=2.2.0.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.2.2.0\lib\net40\protobuf-net.dll</HintPath>
<Reference Include="protobuf-net, Version=2.2.1.0, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
<HintPath>..\packages\protobuf-net.2.2.1\lib\net40\protobuf-net.dll</HintPath>
</Reference>
<Reference Include="SteamKit2, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\SteamKit2.2.0.0-Alpha4\lib\net46\SteamKit2.dll</HintPath>
@@ -385,8 +389,8 @@
. "$(SolutionDir)mono_envsetup.sh"
fi
if [ -n "$MONO_FACADES" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:$MONO_FACADES" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-GUI.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
if [ -n "$MONO_API_PATH" ]; then
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" "/lib:${MONO_API_PATH}" "/lib:${MONO_API_PATH}/Facades" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-GUI.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
else
mono "$(SolutionDir)tools/ILRepack/ILRepack.exe" /ndebug /internalize /parallel /targetplatform:v4 /wildcards /out:"$(SolutionDir)out/ASF-GUI.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll"
fi
@@ -400,12 +404,13 @@
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.5.1\build\dotnet\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets'))" />
<Error Condition="!Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Import Project="..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Resource.Embedder.1.2.2\build\Resource.Embedder.targets')" />
<Import Project="..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.0.10\build\netstandard1.4\Fody.targets')" />
<Import Project="..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'Release' AND Exists('..\packages\Fody.2.1.0\build\netstandard1.0\Fody.targets')" />
<Import Project="..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets" Condition="'$(OS)' != 'Unix' AND '$(ConfigurationName)' == 'WITHOUT_ILREPACK' AND Exists('..\packages\Costura.Fody.1.6.2\build\dotnet\Costura.Fody.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@@ -248,19 +248,21 @@ namespace ArchiSteamFarm {
}
ASF.ArchiLogger.LogFatalException((Exception) args.ExceptionObject);
await Task.Delay(5000).ConfigureAwait(false);
await Task.Delay(1000).ConfigureAwait(false); // For writing stuff to logs
await Exit(1).ConfigureAwait(false);
}
private static void UnobservedTaskExceptionHandler(object sender, UnobservedTaskExceptionEventArgs args) {
if (args?.Exception == null) {
ASF.ArchiLogger.LogNullError(nameof(args) + " || " + nameof(args.Exception));
private static void UnobservedTaskExceptionHandler(object sender, UnobservedTaskExceptionEventArgs e) {
if (e?.Exception == null) {
ASF.ArchiLogger.LogNullError(nameof(e) + " || " + nameof(e.Exception));
return;
}
ASF.ArchiLogger.LogFatalException(args.Exception);
ASF.ArchiLogger.LogFatalException(e.Exception);
// Normally we should abort the application here, but many tasks are in fact failing in SK2 code which we can't easily fix
// Thanks Valve.
e.SetObserved();
}
}
}

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="1.5.1" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.0.10" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.5.0-beta5" targetFramework="net461" />
<package id="Costura.Fody" version="1.6.2" targetFramework="net461" developmentDependency="true" />
<package id="Fody" version="2.1.0" targetFramework="net461" developmentDependency="true" />
<package id="HtmlAgilityPack" version="1.5.0-beta8" targetFramework="net461" />
<package id="Humanizer" version="2.2.0" targetFramework="net461" />
<package id="Humanizer.Core" version="2.2.0" targetFramework="net461" />
<package id="Humanizer.Core.af" version="2.2.0" targetFramework="net461" />
@@ -52,7 +52,7 @@
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net461" />
<package id="NLog" version="5.0.0-beta07" targetFramework="net461" />
<package id="NLog.Windows.Forms" version="4.2.3" targetFramework="net461" />
<package id="protobuf-net" version="2.2.0" targetFramework="net461" />
<package id="protobuf-net" version="2.2.1" targetFramework="net461" />
<package id="Resource.Embedder" version="1.2.2" targetFramework="net461" developmentDependency="true" />
<package id="SteamKit2" version="2.0.0-Alpha4" targetFramework="net461" />
<package id="System.ValueTuple" version="4.4.0-preview1-25305-02" targetFramework="net461" />

View File

@@ -1,19 +1,20 @@
# 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)
[![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)
[![License](https://img.shields.io/github/license/JustArchi/ArchiSteamFarm.svg?label=License&maxAge=86400)](./LICENSE-2.0.txt)
[![GitHub Release](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm.svg?label=Latest&maxAge=60)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![Github Downloads](https://img.shields.io/github/downloads/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=60)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![GitHub release](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm.svg?label=Latest&maxAge=60)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![Github downloads](https://img.shields.io/github/downloads/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=60)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/archisteamfarm/localized.svg)](https://github.com/JustArchi/ArchiSteamFarm/wiki/Localization)
[![Paypal.me Donate](https://img.shields.io/badge/Paypal.me-donate-yellow.svg)](https://www.paypal.me/JustArchi/1usd)
[![Paypal Donate](https://img.shields.io/badge/Paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4)
[![Bitcoin Donate](https://img.shields.io/badge/Bitcoin-donate-yellow.svg)](https://blockchain.info/payment_request?address=1Archi6M1r5b41Rvn1SY2FfJAzsrEUT7aT)
[![Steam Donate](https://img.shields.io/badge/Steam-donate-yellow.svg)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)
[![Patreon support](https://img.shields.io/badge/Patreon-support-yellow.svg)](https://www.patreon.com/JustArchi)
[![Paypal.me donate](https://img.shields.io/badge/Paypal.me-donate-yellow.svg)](https://www.paypal.me/JustArchi/1usd)
[![Paypal donate](https://img.shields.io/badge/Paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4)
[![Bitcoin donate](https://img.shields.io/badge/Bitcoin-donate-yellow.svg)](https://blockchain.info/payment_request?address=1Archi6M1r5b41Rvn1SY2FfJAzsrEUT7aT)
[![Steam donate](https://img.shields.io/badge/Steam-donate-yellow.svg)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)
[![Gitter](https://img.shields.io/gitter/room/JustArchi/ArchiSteamFarm.svg?label=Chat&maxAge=86400)](https://gitter.im/JustArchi/ArchiSteamFarm)
[![Steam Group](https://img.shields.io/badge/Steam-group-yellowgreen.svg)](https://steamcommunity.com/groups/ascfarm)
[![Steam group](https://img.shields.io/badge/Steam-group-yellowgreen.svg)](https://steamcommunity.com/groups/ascfarm)
[![Discord](https://img.shields.io/badge/Discord-join-blue.svg)](https://discord.gg/HStsVSB)
---

View File

@@ -28,7 +28,7 @@ deploy:
- provider: GitHub
tag: $(appveyor_repo_tag_name)
release: ArchiSteamFarm V$(appveyor_repo_tag_name)
description: '**NOTICE:** Pre-releases are experimental versions that often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don''t consider yourself advanced user, please download **[latest stable release](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)** instead. Pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. Check out ASF **[release cycle](https://github.com/JustArchi/ArchiSteamFarm/wiki/Release-cycle)** if you''d like to learn more.\n\n---\n\nThis is automated AppVeyor GitHub deployment, human-readable changelog should be available soon. In the meantime please refer to **[GitHub commits](https://github.com/JustArchi/ArchiSteamFarm/commits/$(appveyor_repo_tag_name))**.\n\n---\n\nASF is available for free. If you''re grateful for what we''re doing, please consider donating. Developing ASF requires massive amount of time and knowledge, especially when it comes to Steam (and its problems). Even 1$ is highly appreciated and shows that you care!\n\n [![Paypal.me Donate](https://img.shields.io/badge/Paypal.me-donate-yellow.svg)](https://www.paypal.me/JustArchi/1usd) [![Paypal Donate](https://img.shields.io/badge/Paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4) [![Bitcoin Donate](https://img.shields.io/badge/Bitcoin-donate-yellow.svg)](https://blockchain.info/payment_request?address=1Archi6M1r5b41Rvn1SY2FfJAzsrEUT7aT) [![Steam Donate](https://img.shields.io/badge/Steam-donate-yellow.svg)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)'
description: '**NOTICE:** Pre-releases are experimental versions that often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don''t consider yourself advanced user, please download **[latest stable release](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)** instead. Pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. Check out ASF **[release cycle](https://github.com/JustArchi/ArchiSteamFarm/wiki/Release-cycle)** if you''d like to learn more.\n\n---\n\nThis is automated AppVeyor GitHub deployment, human-readable changelog should be available soon. In the meantime please refer to **[GitHub commits](https://github.com/JustArchi/ArchiSteamFarm/commits/$(appveyor_repo_tag_name))**.\n\n---\n\nASF is available for free. If you''re grateful for what we''re doing, please consider donating. Developing ASF requires massive amount of time and knowledge, especially when it comes to Steam (and its problems). Even 1$ is highly appreciated and shows that you care!\n\n [![Patreon support](https://img.shields.io/badge/Patreon-support-yellow.svg)](https://www.patreon.com/JustArchi) [![Paypal.me donate](https://img.shields.io/badge/Paypal.me-donate-yellow.svg)](https://www.paypal.me/JustArchi/1usd) [![Paypal donate](https://img.shields.io/badge/Paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4) [![Bitcoin donate](https://img.shields.io/badge/Bitcoin-donate-yellow.svg)](https://blockchain.info/address/1Archi6M1r5b41Rvn1SY2FfJAzsrEUT7aT) [![Steam donate](https://img.shields.io/badge/Steam-donate-yellow.svg)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)'
auth_token:
secure: QC5gIDMvSpd43EG6qW8d1E3ZHiVU4aR7pbKQonXstjj/JtAABf5S1IbtoY4OsnOR
artifact: /.*/

View File

@@ -72,7 +72,7 @@ VERSION_LESS_EQUAL_THAN() {
# Main
echo "INFO: Mono environment setup executed!"
CURRENT_MONO_VERSION="$(mono -V | head -n 1 | cut -d ' ' -f 5 | cut -d '.' -f '1-3')" # We take only first three version numbers, this is needed for facades path in OS X
CURRENT_MONO_VERSION="$(mono -V | head -n 1 | cut -d ' ' -f 5 | cut -d '.' -f '1-3')" # We take only first three version numbers, this is needed for API path in OS X
echo "INFO: Mono version: $CURRENT_MONO_VERSION | Required: ${MINIMUM_MONO_VERSION}+"
@@ -87,22 +87,22 @@ MONO_DEBUG_ADD_IF_AVAILABLE "no-gdb-backtrace"
MONO_ENV_OPTIONS_ADD "-O=all"
MONO_ENV_OPTIONS_ADD "--server"
if [ -n "$MONO_FACADES" ]; then
echo "INFO: Mono facades path was already set to: $MONO_FACADES"
if [ -n "$MONO_API_PATH" ]; then
echo "INFO: Mono API path was already set to: $MONO_API_PATH"
else
for MONO_LOCATION in "/opt/mono" "/usr" "/Library/Frameworks/Mono.framework/Versions/${CURRENT_MONO_VERSION}"; do
for API in "${MINIMUM_NET_FRAMEWORK}-api" "4.5"; do # 4.5 is fallback path that existed before Mono decided to split Facades on per-API basis - still available
if [ -d "${MONO_LOCATION}/lib/mono/${API}/Facades" ]; then
export MONO_FACADES="${MONO_LOCATION}/lib/mono/${API}/Facades"
for API in "${MINIMUM_NET_FRAMEWORK}-api" "4.5"; do # 4.5 is fallback path that existed before Mono decided to split libraries on per-API basis - still available
if [ -d "${MONO_LOCATION}/lib/mono/${API}" ]; then
export MONO_API_PATH="${MONO_LOCATION}/lib/mono/${API}"
break 2
fi
done
done
if [ -n "$MONO_FACADES" ]; then
echo "INFO: Mono facades path resolved to: $MONO_FACADES"
if [ -n "$MONO_API_PATH" ]; then
echo "INFO: Mono API path resolved to: $MONO_API_PATH"
else
echo "WARN: Could not find Mono facades!"
echo "WARN: Could not find Mono API path!"
fi
fi

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,102 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Choose>
<When Condition="$(NCrunchOriginalSolutionDir) != '' And $(NCrunchOriginalSolutionDir) != '*Undefined*'">
<PropertyGroup>
<FodySolutionDir>$(NCrunchOriginalSolutionDir)</FodySolutionDir>
</PropertyGroup>
</When>
<When Condition="$(SolutionDir) != '' And $(SolutionDir) != '*Undefined*'">
<PropertyGroup>
<FodySolutionDir>$(SolutionDir)</FodySolutionDir>
</PropertyGroup>
</When>
<When Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">
<PropertyGroup>
<FodySolutionDir>$(MSBuildProjectDirectory)..\..\..\</FodySolutionDir>
</PropertyGroup>
</When>
</Choose>
<Choose>
<When Condition="$(KeyOriginatorFile) != '' And $(KeyOriginatorFile) != '*Undefined*'">
<PropertyGroup>
<FodyKeyFilePath>$(KeyOriginatorFile)</FodyKeyFilePath>
</PropertyGroup>
</When>
<When Condition="$(AssemblyOriginatorKeyFile) != '' And $(AssemblyOriginatorKeyFile) != '*Undefined*'">
<PropertyGroup>
<FodyKeyFilePath>$(AssemblyOriginatorKeyFile)</FodyKeyFilePath>
</PropertyGroup>
</When>
<Otherwise >
<PropertyGroup>
<FodyKeyFilePath></FodyKeyFilePath>
</PropertyGroup>
</Otherwise>
</Choose>
<PropertyGroup>
<ProjectWeaverXml>$(ProjectDir)FodyWeavers.xml</ProjectWeaverXml>
<FodySignAssembly Condition="$(FodySignAssembly) == '' Or $(FodySignAssembly) == '*Undefined*'">$(SignAssembly)</FodySignAssembly>
<FodyPath Condition="$(FodyPath) == '' Or $(FodyPath) == '*Undefined*'">$(MSBuildThisFileDirectory)..\..\</FodyPath>
</PropertyGroup>
<UsingTask
TaskName="Fody.WeavingTask"
AssemblyFile="$(FodyPath)\Fody.dll" />
<Target
AfterTargets="AfterCompile"
Condition="Exists('@(IntermediateAssembly)')"
Name="FodyTarget"
DependsOnTargets="$(FodyDependsOnTargets)"
Inputs="@(IntermediateAssembly->'%(FullPath)');$(FodyKeyFilePath);$(ProjectWeaverXml)"
Outputs="$(TargetPath)">
<Fody.WeavingTask
AssemblyPath="@(IntermediateAssembly)"
IntermediateDir="$(ProjectDir)$(IntermediateOutputPath)"
KeyFilePath="$(FodyKeyFilePath)"
NuGetPackageRoot="$(NuGetPackageRoot)"
ProjectDirectory="$(ProjectDir)"
SolutionDir="$(FodySolutionDir)"
References="@(ReferencePath)"
SignAssembly="$(FodySignAssembly)"
ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
DefineConstants="$(DefineConstants)"
PackageDefinitions="@(PackageDefinitions->'%(ResolvedPath)')"
DebugSymbols="$(DebugSymbols)"
>
<Output
TaskParameter="ExecutedWeavers"
PropertyName="FodyExecutedWeavers" />
</Fody.WeavingTask>
<PropertyGroup>
<FodyWeavingTargetWasRun>True</FodyWeavingTargetWasRun>
</PropertyGroup>
</Target>
<UsingTask
TaskName="Fody.VerifyTask"
AssemblyFile="$(FodyPath)\Fody.dll" />
<Target Condition="'$(NCrunch)' != '1' And ('$(FodyWeavingTargetWasRun)' == 'True')"
AfterTargets="AfterBuild"
Name="FodyVerifyTarget"
DependsOnTargets="$(FodyVerifyDependsOnTargets)">
<Fody.VerifyTask
ProjectDirectory="$(ProjectDir)"
TargetPath="$(TargetPath)"
SolutionDir="$(FodySolutionDir)"
DefineConstants="$(DefineConstants)"
/>
</Target>
<!--Support for ncrunch-->
<ItemGroup Condition="'$(NCrunch)' == '1'">
<None Include="$(FodyPath)\*.*" />
</ItemGroup>
</Project>

BIN
packages/Fody.2.1.0/Fody.2.1.0.nupkg vendored Normal file

Binary file not shown.

BIN
packages/Fody.2.1.0/Fody.dll vendored Normal file

Binary file not shown.

BIN
packages/Fody.2.1.0/Mono.Cecil.Pdb.dll vendored Normal file

Binary file not shown.

BIN
packages/Fody.2.1.0/Mono.Cecil.dll vendored Normal file

Binary file not shown.

View File

@@ -44,7 +44,7 @@
AssemblyFile="$(FodyPath)\Fody.dll" />
<Target
AfterTargets="AfterCompile"
Condition="Exists('@(IntermediateAssembly)')"
Condition="Exists('@(IntermediateAssembly)') And '$(DesignTimeBuild)' != 'true'"
Name="FodyTarget"
DependsOnTargets="$(FodyDependsOnTargets)"
Inputs="@(IntermediateAssembly->'%(FullPath)');$(FodyKeyFilePath);$(ProjectWeaverXml)"
@@ -63,9 +63,10 @@
DefineConstants="$(DefineConstants)"
PackageDefinitions="@(PackageDefinitions->'%(ResolvedPath)')"
DebugSymbols="$(DebugSymbols)"
DebugType="$(DebugType)"
>
<Output
<Output
TaskParameter="ExecutedWeavers"
PropertyName="FodyExecutedWeavers" />
</Fody.WeavingTask>

View File

@@ -44,7 +44,7 @@
AssemblyFile="$(FodyPath)\Fody.dll" />
<Target
AfterTargets="AfterCompile"
Condition="Exists('@(IntermediateAssembly)')"
Condition="Exists('@(IntermediateAssembly)') And '$(DesignTimeBuild)' != 'true'"
Name="FodyTarget"
DependsOnTargets="$(FodyDependsOnTargets)"
Inputs="@(IntermediateAssembly->'%(FullPath)');$(FodyKeyFilePath);$(ProjectWeaverXml)"
@@ -63,9 +63,10 @@
DefineConstants="$(DefineConstants)"
PackageDefinitions="@(PackageDefinitions->'%(ResolvedPath)')"
DebugSymbols="$(DebugSymbols)"
DebugType="$(DebugType)"
>
<Output
<Output
TaskParameter="ExecutedWeavers"
PropertyName="FodyExecutedWeavers" />
</Fody.WeavingTask>

Some files were not shown because too many files have changed in this diff Show More