Healix / Gw2Launcher

Manages and allows for multiple Guild Wars 2 clients to be launched
MIT License
179 stars 24 forks source link

Question: efficient way to collect daily rewards from 20 accounts #324

Open ultimate-raman opened 1 year ago

ultimate-raman commented 1 year ago

How much delay should I put between each login to make sure that login error is not triggered? Is there any built in setting that prevent login fail? (DDOS Protection ig)

Healix commented 1 year ago

Settings > General > Launching. Enable the limiter. You can also enable a timeout here to have the account automatically relaunched if it doesn't login within the given time.

Caliban2017 commented 1 year ago

From my previous ways to Login >10 Accounts, the DDOS Protection comes sooner or later, try to avoid failed Logins, because they trigger it sooner. Don't launch more then 1 Account at the same time and use a Delay of min 20-30 Seconds in between each Account an you can do about 25 Accounts in a row. When you have triggered the Protection, you have to wait 5-6 Hours until it will reset.

Sadly GW2 Launcher does not allow to close the Game, as soon as Mumblelink begins to write Data (as far as i know you do not have to load the whole Game, you can abort it in the Loading Screen. It is enough to load until the Game loaded some files and then exit the Process to save time). This Function ("Auto Select Char and exit Game when collected Daily Login Reward") would make GW2 Launcher the Go to Tool for every day use but i know the Developer won't enable automatic Logins this way.

There is another Tool which do this, but i don't want to do any Advertising here. But sadly this Tool makes a lot of trouble since the latest Launcher Update, where the Game is losing the Login Credentials.

But there is the possibility to launch a own exe file after Character Load Screen for example. With some Automation Software it would be possible to create some external Scripts to terminate the Game after collecting the Daily Reward. But my coding Skills are not good enough for it. So a Start when Method for "after Daily Reward collect" would be nice, terminate the Game after this with a Script would be very easy :D

Healix commented 1 year ago

Sadly GW2 Launcher does not allow to close the Game, as soon as Mumblelink begins to write Data (as far as i know you do not have to load the whole Game, you can abort it in the Loading Screen. It is enough to load until the Game loaded some files and then exit the Process to save time). This Function ("Auto Select Char and exit Game when collected Daily Login Reward") would make GW2 Launcher the Go to Tool for every day use but i know the Developer won't enable automatic Logins this way.

You can automatically close an account by setting up a command to run after loading a character:

taskkill /PID %processid%

Automatically loading a character would be against the rules. All you have to do is press enter. Also ,the login rewards actually trigger when you begin loading a character, so you can actually just enter and alt+f4.

Caliban2017 commented 1 year ago

Sadly GW2 Launcher does not allow to close the Game, as soon as Mumblelink begins to write Data (as far as i know you do not have to load the whole Game, you can abort it in the Loading Screen. It is enough to load until the Game loaded some files and then exit the Process to save time). This Function ("Auto Select Char and exit Game when collected Daily Login Reward") would make GW2 Launcher the Go to Tool for every day use but i know the Developer won't enable automatic Logins this way.

You can automatically close an account by setting up a command to run after loading a character:

taskkill /PID %processid%

Automatically loading a character would be against the rules. All you have to do is press enter. Also ,the login rewards actually trigger when you begin loading a character, so you can actually just enter and alt+f4.

Thanks for your Tip. I finally wrote a little Script and compiled it to a Exe which send the Enter Button to the Game Window for the Character Loading Screen. Now it is possible to fully automatically login an Account and close it after it is loaded into the Game with your Command. And it worked perfectly on my todays Multi Account Login :) I limited the maximal launched Instances to 1, so there is a serial runtrough of the Accounts.

Is there a way to launch an Account without the Automation? I noticed Rightclick -> Selected -> Disable Run after but it disable the Automations on all Accounts?

I have another Question: is it possible to add the Colors to the StyleOptions for the Daily Reward Number? I mean the Number which is showed instead of the Icon of the Daily Login Reward in the little Circle on the bottom right. It is now a bright white with a thin black Border and it is not very good visible on a bright background. because the Background of the Circle is white too. So you have white Font on white Background which does not look very great. I checked the Color Options in the Style Settings but can't find the Color for it... a green Highlight around the Circle would also be cool, when the Account has reached the Day 28 big Chest...

Healix commented 1 year ago

Is there a way to launch an Account without the Automation? I noticed Rightclick -> Selected -> Disable Run after but it disable the Automations on all Accounts?

Yes, it disables it on all accounts. You'd have to disable it under the account's settings if you wanted to only disable it for 1 account. The other option is cloning the account, then having a page for accounts you want to actually play and another page for only logins.

I could change it to only apply to selected accounts. Disable automatic logins and run after both apply to all accounts and are only under the selected menu for convenience, since you can open that menu by selecting multiple accounts via right click dragging.

I have another Question: is it possible to add the Colors to the StyleOptions for the Daily Reward Number?

Sure.

a green Highlight around the Circle would also be cool, when the Account has reached the Day 28 big Chest...

I was going to add the rarity color as an outline (you'd be able to pick the color for each rarity). Day 28 is the only ascended item, so that'd basically be the same thing.

Also, why not use the icon? If you enable the icon for that 1 item, it'd always be obvious when it's the final day.

Caliban2017 commented 1 year ago

I could change it to only apply to selected accounts. Disable automatic logins and run after both apply to all accounts and are only under the selected menu for convenience, since you can open that menu by selecting multiple accounts via right click dragging.

In my case the best option would be a one-time login button, like a "collect mode", where you can log into the account one time to collect the daily rewards and after the logout it would be like befor with the automation settings. A additional Run Function like "Launch Game (without run After)".

I was going to add the rarity color as an outline (you'd be able to pick the color for each rarity). Day 28 is the only ascended item, so that'd basically be the same thing.

Also, why not use the icon? If you enable the icon for that 1 item, it'd always be obvious when it's the final day.

i would use the Icons instead of the Numbers in combination with the highlighted Color-Rings. When you have like 10 Accounts, it would be nice to see instantly any Account that is on Day 28. Where you can exclude this Account from the Daily Login Launches by launching it without the Automations, collect the Rewards, logout and it should be marked as daily login colelcted. Then i would use the Function to login all accounts which are not marked as daily Login collected. I enabled the Button for this Login Method in the Style Settings. This way it would possible to avoid double Logins, because you did not see an account is at day 28 and need to be collected. For now i must check every number on every account, to see if one account is on day 28. Of course a "highlight" that pops out would be really helpfull to sort out the accounts that need to be collected.

A Filter for this would also be a cool option, like on the search field, like a wildcard filter to show every accounts which are on day 28 and need to be collected... like writing something like "*28" in the search bar and it filter every account which is on day 28 would be very nice too... just for some idead and suggestions :)

Sorry for my bad english, i hope you can understand what i mean...

Caliban2017 commented 1 year ago

Also, why not use the icon? If you enable the icon for that 1 item, it'd always be obvious when it's the final day.

Oh yes, i realized now that i did not read it properly. Of course, this is a good Idea, activate only the Icon for the Grand Chest and left all other Icons untouched, so the Accounts with the Chest are easy to identify in the List. This is a nice work around for now, thanks for this tip! And the Logins of my Accounts are working perfectly with GW2 Launcher, not one single missed Login or Error. Really thank you very much for such a great Tool!

Healix commented 1 year ago

New release:

Caliban2017 commented 1 year ago

New release:

  • You can search for 28 to show accounts displaying the 28th login reward
  • I added the rarity as an option, so if you want to highlight only 28, you can set the alpha of the other rarities to 0
  • For all of the login reward colors, search for: AccountLoginReward (Tools > Colors)
  • Launch (without run after) added to the menu (also -l:disablera for use in shortcuts)

Wow, i have tested the new Version now and you have it perfectly done! This looks so much better now, the Rarity Option makes it so much easier to see the progress of the Daily Rewards. The Numbers are much better readable now. And the GW2Launcher overall works soooo good, i had no Problems so far, the Daily Reward Counter is 100% reliable. The Launch Button with the "without Run after" is exactly what i wanted :) Thank you very much for bringing my wishes into the Program! Very good work!

I have noticed one little more bug maybe, i don't know if it is intentional - when i use the Button to toggle the Account Bar (which can be activated in the Style Options), it works only until a new Account is launched. So i toggle off the Account bar but as soon as a Accounts launches, it opens up automatically again. So it does not stay off, when it is toggled off. But maybe i am wrong here and it is only to toggle the Bar, when all Games Instances are all already opened? So it is rather a Toggle Function then a On/Off Button for the Account Bar. But maybe it is a suggestion for a On/Off Button then to completly turn on and off the Bar via a Button.

And i have one more suggestion for one more Feature/Button, but of course, only a suggestion. I miss a Serial Login Function, for all Accounts which have not done the Daily Login Reward. I know i can Limit the Number of Multiple Accounts in the Launch Options and can just simply limit it to 1 to only launch one Game Instance at time (to not trigger the DOS Protection of Arenanet) but when i want to use GW2 Launcher for Multiboxing, i have to change the Game Limit again up to 2 or 3 manually. So a Button with a Serial Login Function would be very usefull. Maybe a Tick Box would be good in the Options like "Use Serial Login Mode (only 1 Account at same time) when Logged in via a Login Button (like the Show Button to launch accounts showing daily login)". So when not using the Serial Login Button and manually start Accounts, it is not necessary to change the maximal Game Instances and change it back to 1 after using Multiboxing.

Healix commented 1 year ago

The toggle button only hides/shows the bar. It'll only remain hidden while an account is active, since the bar will automatically show when launching an account while no accounts are active. If you disable the option to automatically hide when no accounts are active (right click the top/left bar), it won't automatically show either, so you can use the toggle button to manually control it. I'll change it to hide until manually shown again.

If you want only 1 account to be active without setting a limiter, Launch (normal) will do that. If that's okay, I could just have the launch daily/all buttons use normal mode on right click.

Caliban2017 commented 1 year ago

The toggle button only hides/shows the bar. It'll only remain hidden while an account is active, since the bar will automatically show when launching an account while no accounts are active. If you disable the option to automatically hide when no accounts are active (right click the top/left bar), it won't automatically show either, so you can use the toggle button to manually control it. I'll change it to hide until manually shown again.

Okay, got it. It is not a big thing, because it does not really bother while the Account bar is on. When i daily Login my Accounts, i just saw that it open again and again even i press the toggle button. Becuase when i do the automatically Login, i don't need the Account Bar, so i tried to turn it off via that Button.

If you want only 1 account to be active without setting a limiter, Launch (normal) will do that. If that's okay, I could just have the launch daily/all buttons use normal mode on right click.

I don't know if we mean the same. Let me explain what i mean: When i daily Login my Accounts, i set the maximum launched Game Instances in the Options to 1, so every Account is logged in in a Serial progression, one after another, not two or three on the same Time, because i noticed, this way the DDOS-Protection of Arenanet is not triggered so fast, when there are more time between every logged in Account from the same IP.

But when i want to use GW2Launcher for normal Multiboxing, i have to increase the maximum Game Instances manually in the Options to 2 or higher, because when it is set to 1, of course, i can only Launch one instance. The other ones will then wait in the "Waiting" state, until the other Game Instances is closed. On the Daily Logins, that is wanted but on Multiboxing, of course not.

So another Variant maybe is a Launch Button on Right-Click, which ignores the Limitation of the maximum Game Instances simultaneously? So i can launch two oder three Accounts at the same time, without setting the maximum Game Instances everytime up before i want to do this. But maybe this get in Conflict with the other new Button you added in the newest Version to ignore the run after automations!?

The better way i think would be one more Button you can Show in the Style Options, which does exactly the same as the "Show button to launch accounts showing daily login", but with the addition to run all Accounts in a Serial mode, so just for the Time logging in via that Button, the maximum Game Instances is set to 1 and when all Accounts are done or aborted, it uses the regular Settings set in the Settings, like 3 maximum Instances again.

Or one more Variant would be a Tick Box for a "Serial Mode when logging in multiple Accounts". So when it is activated and there are more then 1 Accounts marked so start or using a "launch all accounts" Button, they are launching in a Serial Mode again, so limited to 1 Game Instance at the same time. But this method would be not so nice, when you select two Accounts to Multibox. In this Case you need again to go into Options and remove the Mark again vor the Serial Mode, so they can launch at the same Time again.

I hope that Feedback helps a little bit to improve your Tool and it is not to much effort, because this would only be functions which makes the Daily use faster and easier. And beside my suggestions i have at the Moment no idea how to improve the Tool more, because it is already so mighty and there are so many Options to optimize it for personal use, really love the Tool. It saves so many headaches i had before with other Tools...

Healix commented 1 year ago

Launch (normal) will do the same thing as setting the maximum number of active accounts to 1. If you used "Launch (normal)" on account A and B for example, A would only launch if no other accounts were active and B would launch after A exited. If you then used "Launch" on C and D, they would have to wait for B to exit, then both would launch.

A toggle button to limit active accounts to 1 would be the simplest generic solution.

Caliban2017 commented 1 year ago

Launch (normal) will do the same thing as setting the maximum number of active accounts to 1. If you used "Launch (normal)" on account A and B for example, A would only launch if no other accounts were active and B would launch after A exited. If you then used "Launch" on C and D, they would have to wait for B to exit, then both would launch.

Okay, but this does not apply on the "login all accounts with daily login reward" Button or am i wrong? In this case this would be ignored and if i set the Instances to 3 for example, it launches 3 Game Instances at the same time, which i don't want to.

Of course one method would be to select all Accounts, except all which are already done the daily login reward (for example the Accounts with the 28 Day Chest, which i already logged in to loot the Account) and then use the Launch (normal) Button. But this makes the Button to login all accounts with daily login reward useless for me. For this reason i suggested a extra Button which login all Accounts which does not have the daily login reward already collected and limiting the Instances while using this Button to maximum 1.

A toggle button to limit active accounts to 1 would be the simplest generic solution.

This would also be a good solution, but the Toggle Button should be fast accessable, like the other Buttons you can show on Top of the App Window via the Style Settings. A simple Button to toggle fast between Serial Login and Simultaneous Login.

Caliban2017 commented 1 year ago

One more little suggestion for a Feature: i notices there are Buttons for Launch all Accounts and Launch all accounts showing Daily Login reward. But one more Button is missing which would be nice to have is a "Launch all selected Accounts". I know you can Rightclick -> Selected -> Launch (normal) to start all selected Accounts but a single Buttonclick would of course be nicer and faster :)

huds0nhawk commented 1 year ago

You can automatically close an account by setting up a command to run after loading a character: taskkill /PID %processid% Automatically loading a character would be against the rules. All you have to do is press enter. Also ,the login rewards actually trigger when you begin loading a character, so you can actually just enter and alt+f4.

Thanks for your Tip. I finally wrote a little Script and compiled it to a Exe which send the Enter Button to the Game Window for the Character Loading Screen. Now it is possible to fully automatically login an Account and close it after it is loaded into the Game with your Command. And it worked perfectly on my todays Multi Account Login :) I limited the maximal launched Instances to 1, so there is a serial runtrough of the Accounts.

I coulden't get this command Run("taskkill /PID %processid%") working in an AHK script and am currently using
Run("taskkill /IM Gw2-64.exe" ,, "Hide") But this seems to take between up to 20 seconds to close the account. Any hint on the syntax to use the PID this way in the AHK script?

Otherwise thx for all the features added so far.

Healix commented 1 year ago

%processid% is a variable within Gw2Launcher, so you can't use it in AHK. If you wanted to pass it, you would need to have Gw2Launcher run a script to write the process ID to file, then have AHK load it.

Depending on what you're wanting, you could just get the process ID of the current window in AHK and close it:

WinGet, processid, PID, A Process, Close, %processid%

That said, it's likely taking 20 seconds to close because GW2 is taking 20 seconds to close. Use /F to have it kill the process immediately, instead of nicely requesting it to close.

taskkill /F /IM Gw2-64.exe

huds0nhawk commented 1 year ago

Ah, I didn't get that option /F, thanks for getting back this quick. The script is called with %processid% as parameter which then can be stored in a variable. I'll have a look into it later but am happy for now. Thanks a lot.

Healix commented 1 year ago

If you're having Gw2Launcher run "script.ahk %processid%", then you would (assuming v2):

ProcessClose A_Args[1]

or

Run 'taskkill /F /PID ' A_Args[1],,'Hide'

Alex1016182 commented 1 year ago

Also ,the login rewards actually trigger when you begin loading a character, so you can actually just enter and alt+f4.

Does this stack all the way until the 28th time? So you just have to load the map on the alt and then you can open all the chests at once?

Healix commented 1 year ago

Does this stack all the way until the 28th time? So you just have to load the map on the alt and then you can open all the chests at once?

After a few stack up, the oldest is automatically opened.

Alex1016182 commented 1 year ago

Wow, so there's zero reason to really ever let the character load apart from when you want to loot it?

Healix commented 1 year ago

Wow, so there's zero reason to really ever let the character load apart from when you want to loot it?

The risk is it could change and you wouldn't know until you went to collect.

Caliban2017 commented 1 year ago

This is my AHK Script i use. Additional this Script opens a Chest automatically and collect the Loot. You can place all your Accounts on a Spot like a Jumping Puzzle Chest (Southsun Cove for example) and when it loaded the Game, it opens the Chest, collect the Stuff and close the GW2 Process:

You must create a delay.txt File in the same directory and fill it with the Amount of Time it needs to open the Chest (7000 for 7 Seconds for example) and save it. It then press ingame F, wait 7 Seconds, press F again and close the GW2 Instance with the ProcessID. This way you can collect some extra Gold over Time. Or do it like Healix mentioned, remove the stuff and use only the Last part of the Script for the Arguments given by GW2 Launcher.

importSec := FileRead("delay.txt")

WinWait "ahk_class" "ArenaNet_Gr_Window_Class" Sleep 500 ControlSend "F",, "ahk_class" "ArenaNet_Gr_Window_Class" Sleep importSec ControlSend "F",, "ahk_class" "ArenaNet_Gr_Window_Class" Sleep 500 for n, param in A_Args ; For each parameter: { ProcessClose param }