ensingm2 / SteamMonsterGameScript

A Javascript automator for the 2015 Summer Steam Monster Minigame
78 stars 29 forks source link

A series of thoughts #173

Open sinnoaria opened 9 years ago

sinnoaria commented 9 years ago

Some of these might already be implemented, but just a few thoughts:

God Mode should activate when no healings are up, when gold rain x # is up, and when you are at a low hp threshold.

Boss loot is actually a somewhat useful upgrade. The increased loot means more chances at say raining gold. However, it isn't very useful until they are fairly cheap. Once they are cheap enough though, you can turn that 25% chance of loot to 50%. and possibly eventually 100%. With that, you increase your chances of getting the permanent crit boosters. If you can then get your crit to 100%, you would do a lot of extra damage. Plus, even if it doesn't give you that, it may give the raining gold or other items.

The script should have an option to automatically buy Metal Detector and Decrease Cooldowns.

If slaves still work, could they open in a new tab instead of a window? Another thing to try would be to have four or more different browsers running simultaneously for one account and one browser for another and seeing if there is a significant difference of gold gained when raining gold hits (it would at least check for raining gold effectiveness). If slaves work at all, there should be at least double the gold.

It should be possible to disable boss nuking. (You might not need the boss, but someone else might). Instead prioritizing the time between bosses.

There should be a variables panel where you can change certain variables such as timings. This could include how much time passes per level for the last # of levels (excluding or including boss levels) compared to your current stock of damage items.

There could also be a check where you use throw money at screen at the end. Either where you throw money at the very end (say within 10 minutes left at a random value) or early enough that you can use all of them. Only thing being that it would be under the condition that it is unlikely that your current gold will go over your maximum gold.

A randomize variables button that randomizes variables based on a certain set of rules (such as bosses are every tenth floor) so that each person can have slightly different timings. This could randomize specific variables or all variables that have a reason to be changed. (For example, what floors to farm or only item usage variables).

Max elemental damage, when used, should override any non-natural best element room for target selection. I've used it manually and found that it went to another room while there were still enemies.

Is there any way to disable all particles and animations and popup numbers and only show health bars and boss/treasure monster status? Without opening a bunch of slave windows.

Also, the ability to prioritize the highest or lowest player lanes when you have no 'favored' lanes would be nice.

ensingm2 commented 9 years ago

God Mode should activate when no healings are up, when gold rain x # is up, and when you are at a low hp threshold.

Yeah, I've been putting off autocast for God Mode. Still need to do that.

Boss loot is actually a somewhat useful upgrade. The increased loot means more chances at say raining gold. However, it isn't very useful until they are fairly cheap. Once they are cheap enough though, you can turn that 25% chance of loot to 50%. and possibly eventually 100%. With that, you increase your chances of getting the permanent crit boosters. If you can then get your crit to 100%, you would do a lot of extra damage. Plus, even if it doesn't give you that, it may give the raining gold or other items.

We don't autobuy that simply because there's not a good comparison like there are with the other upgrades. It's too difficult to tell when it's efficient to buy it, so we just leave it to the player.

The script should have an option to automatically buy Metal Detector and Decrease Cooldowns.

autoBuyAbilities=true

If slaves still work, could they open in a new tab instead of a window?

Why? this just adds more issues (having to use workarounds for non-focused tabs, etc.). Seems like more trouble than it's worth to me.

It should be possible to disable boss nuking. (You might not need the boss, but someone else might). Instead prioritizing the time between bosses.

Yeah I'll probably add this at some point in the near future.

There should be a variables panel where you can change certain variables such as timings. This could include how much time passes per level for the last # of levels (excluding or including boss levels) compared to your current stock of damage items.

That's been on the todo list but other stuff has been higher priority. You can always look at the variables section for the ReadMe and assign them yourself.

There could also be a check where you use throw money at screen at the end.

Already added.

A randomize variables button that randomizes variables based on a certain set of rules (such as bosses are every tenth floor) so that each person can have slightly different timings. This could randomize specific variables or all variables that have a reason to be changed. (For example, what floors to farm or only item usage variables).

Unless I'm mistaken it's probably better for everyone to use around the same time, except for items such as cripple and abilities that don't stack (Decrease Cooldowns).

Max elemental damage, when used, should override any non-natural best element room for target selection. I've used it manually and found that it went to another room while there were still enemies.

Not sure I understand you here. Are you saying the elemental lanes are still prioritized over lanes with max elemental damage activated? If so, Yeah that should be fixed.

Is there any way to disable all particles and animations and popup numbers and only show health bars and boss/treasure monster status? Without opening a bunch of slave windows.

No, but you can use the FPS Limiter option.

Also, the ability to prioritize the highest or lowest player lanes when you have no 'favored' lanes would be nice.

There is always a prioritized lane/target.

sinnoaria commented 9 years ago

The slave windows can be rather bothersome as it opens in the foreground instead of the background, so if you are doing other stuff such as watching a video, it can interrupt the other stuff. Especially when doing things in fullscreen mode.

Only problem I have with changing the variables in the script is that I have to change them every time the script is updated.

And while it might be better for everyone to using things at around the same time (not exactly), it might be better if it doesn't look too obvious that we are all using the same script or w/e. Also, I was particularly referring to things that don't work well together such as decreased cooldowns and high damage items (cripple).

Essentially, what happened was. My bonus is fire. Lane 1 is water, Lane 2 is water, Lane 3 is Wind. I use max elemental damage on lane 1, then it switches to lane 3 when it should have stayed in lane 1.

The FPS Limiter option couldn't be turned off earlier, can it be turned off now?

What I mean is say there is no lane with max elemental damage and no lane where you get the elemental damage bonus. Instead of prioritizing a lane by simple rules, prioritize a lane by user choice of most players or least players.

ensingm2 commented 9 years ago

The slave windows can be rather bothersome as it opens in the foreground instead of the background, so if you are doing other stuff such as watching a video, it can interrupt the other stuff. Especially when doing things in fullscreen mode.

Fair enough.

it might be better if it doesn't look too obvious that we are all using the same script or w/e.

Nah, shouldn't matter. Valve devs have commented on other autoclicker scripts.

Also, I was particularly referring to things that don't work well together such as decreased cooldowns and high damage items (cripple).

See https://github.com/ensingm2/SteamMonsterGameScript/issues/119

Essentially, what happened was. My bonus is fire. Lane 1 is water, Lane 2 is water, Lane 3 is Wind. I use max elemental damage on lane 1, then it switches to lane 3 when it should have stayed in lane 1.

This sounds like it's working fine. Since you're maxing fire and you switched to a wind lane, it must have been due to another priority (Raining Gold? Lower HP but same mobType? were you low on health and out of healing, so it swapped you to a lane with medics active?), not elemental.

If you were maxing fire and it switched to a fire lane because of elemental affinity during max elemental damage, that would be a bug (Which may still exist, I'll check into it when at my desktop).

The FPS Limiter option couldn't be turned off earlier, can it be turned off now?

Should be able to, yeah.

prioritize a lane by user choice of most players or least players.

How does this benefit you?

sinnoaria commented 9 years ago

Thing is that it switched to a lane without any buffs.

As for how that priority would benefit, I guess it doesn't if there are a lot of people using the scripts, but if the room only has a few people using scripts, it could help focus the bonuses into one lane by getting rid of two lanes earlier by entering high player lanes. Or you could hit low player lanes with debuffs like cripple to speed up the process while lowering the risk of overlap.

ensingm2 commented 9 years ago

Thing is that it switched to a lane without any buffs.

There were no buffs and you clearly didn't switch because of element (no lane was weak to your focused element). This means you either swapped to a higher priority mob type, or a mob with lower HP. I don't see an issue here?

As for how that priority would benefit, I guess it doesn't if there are a lot of people using the scripts, but if the room only has a few people using scripts, it could help focus the bonuses into one lane by getting rid of two lanes earlier by entering high player lanes. Or you could hit low player lanes with debuffs like cripple to speed up the process while lowering the risk of overlap.

Doing this would actually be detrimental. Currently unless there's another priority (mob type, element, etc), you focus whatever mob has the lowest health, in order to receive the gold applied to the lane when it dies.

sinnoaria commented 9 years ago

You get more from using rain of gold on a boss than just killing small mobs though. The idea being to rush through small levels and focus on boss levels. (only an issue in small rooms)

Also, when turning off autoupgrader, it keeps buying the last selected upgrade.

Also, how would I make it so that if the next level of boss loot is less than or equal to 10% of the next upgrade's cost, it buys boss loot instead? (that is roughly when it is effective). Needless to say, at this point, I'm essentially getting gold rain about as fast as I can use them.

Essentially, 10% until the drop rate is 50%, then 1% until 100%.

I'm thinking something like:

    if (canUpgrade(gBossLoot)) {
        data = scene.m_rgTuningData.upgrades[gBossLoot];
        cost = scene.GetUpgradeCost(gBossLoot);
        dpg = 1;
        if (scene.GetUpgradeLevel(gBossLoot) < 25) {
            if (cost < best.cost/10) {
                best = {
                    id: gBossLoot,
                    cost: cost,
                    dpg: dpg
                };
            }
        }
        else if (scene.GetUpgradeLevel(gBossLoot) < 75) {
            if (cost < best.cost/100) {
                best = {
                    id: gBossLoot,
                    cost: cost,
                    dpg: dpg
                };
            }
        }

Realistically, the goal here would be to make it so that if drop rate is under 50, if each round excluding boss rounds takes over 5 seconds, loot if the cost is less than 10% of the next upgrade. If the drop rate is at or over 50 but under 100, if each round takes over 10 seconds, loot if the cost is less than 1% of the next upgrade.

Also, another thought: make it so that gold rain is used based on the average time for the last 10 boss levels. If the average time for the past few boss levels is over x seconds (say 20), then use gold rain.

I'll probably do something about it when I get home, but that will be a while.

This is what I have so far, but not tested:

    var lootRate = Math.round(g_Minigame.m_CurrentScene.m_rgPlayerTechTree.boss_loot_drop_percentage * 100, 5);
    var levelTime = (g_Minigame.m_CurrentScene.m_rgGameData.timestamp - g_Minigame.m_CurrentScene.m_rgGameData.timestamp_game_start) / g_Minigame.m_CurrentScene.m_rgGameData.level;
    var lootEfficient = false;
    if ( (lootRate < 50 && gBossLoot.cost < best.cost * 0.1 && gBossLoot.cost < best.cost * 10 * levelTime) || (lootRate < 100 && gBossLoot.cost < best.cost * 0.01 && gBossLoot.cost < best.cost * levelTime) ) {
        lootEfficient = true;
    }

    if (canUpgrade(gBossLoot) && lootEfficient) {
        best = {
                    id: gBossLoot,
                    cost: gBossLoot.cost,
                    dpg: gBossLoot.cost
                };
            }
ensingm2 commented 9 years ago

You get more from using rain of gold on a boss than just killing small mobs though. The idea being to rush through small levels and focus on boss levels. (only an issue in small rooms)

Correct, but I'm not sure why this is relevant to anything in this issue.

Also, when turning off autoupgrader, it keeps buying the last selected upgrade.

Please make specific issues. lumping everything in one leads to duplicates and people getting confused, and issues going off-topic. See https://github.com/ensingm2/SteamMonsterGameScript/issues/176

Also, how would I make it so that if the next level of boss loot is less than or equal to 10% of the next upgrade's cost, it buys boss loot instead? (that is roughly when it is effective). Needless to say, at this point, I'm essentially getting gold rain about as fast as I can use them.

Again, separate issues, but something along these lines (Note: this is pseudocode):

var bossDropChance = ; // Whatever
var bossLootEffective = (bossDropChance < .5 && gBossLoot.cost < best.cost * 0.1) || (bossDropChance < 1 && gBossLoot.cost < best.cost * 0.01)
if (canUpgrade(gBossLoot) && bossLootEffective)
    best = gBossLoot;

This code would have to be used as the final check before actually buying the 'best' item.

If you implement it and issue a pull request I'll roll it back into master.

sinnoaria commented 9 years ago
    var gBossLoot = 19;
    var lootRate = Math.round(g_Minigame.m_CurrentScene.m_rgPlayerTechTree.boss_loot_drop_percentage * 100, 5);
    var levelTime = (g_Minigame.m_CurrentScene.m_rgGameData.timestamp - g_Minigame.m_CurrentScene.m_rgGameData.timestamp_game_start) / g_Minigame.m_CurrentScene.m_rgGameData.level;
    var lootCost = scene.GetUpgradeCost(gBossLoot);
    var lootEfficient = false;
    if ( (lootRate < 50 && lootCost < best.cost * 0.1 && lootCost < best.cost * 10 * levelTime) || (lootRate < 100 && lootCost < best.cost * 0.01 && lootCost < best.cost * levelTime) ) {
        lootEfficient = true;
    }

    if (canUpgrade(gBossLoot) && lootEfficient) {
        best = {
                    id: gBossLoot,
                    cost: lootCost,
                    dpg: gBossLoot.cost
                };
            }

although I put the gBossLoot = 19; in the same location as gLuckyShot. It isn't the most efficient way of doing it, but I didn't feel like having it cache the last 20 levels' worth of times (21 really).

Edit:

So looking at things again, I realized that boss loot was a lot more helpful than I initially thought. Much faster to just nuke the non-boss rooms with cripples and such.