I'm tired of losing points after shield was raised

vudu3
vudu3 Posts: 940 Critical Contributor
edited May 2014 in MPQ General Discussion
Here's a short story for everyone--

In the current Top Gun PVP I'm at about 990 points and #9 in my bracket. I queue up three 25+ point battles, break my shield and attack. After about 15 minutes I've won 4 battles but was attacked 3 times for a net gain of about 50 points. I'm now #4 in my bracket so I quickly shield again. About a minute after my shield was raised I get a message showing that I was attacked for a loss of 35 points; I'm back down to #9.

I'm pretty sure this happens when someone has already started a battle against you so my question isn't so much why does this happen as it is WHY DOES THIS HAPPEN? I can't be the only one who's extremely frustrated with this setup. When your shield is up you shouldn't lose any points. Period. End of Story.

Does anyone know the reason why it's setup this way? Is it a system limitation or was it deliberately designed this way?

And a related question--how does anyone gain points during the final 8 hours of an event? It seems a futile effort because for every match you win you're equally as likely to get hit once or more. I used to always wait until the second day to join an event hoping to avoid the eager beavers who jump right in but now it seems like the best course of action may be to start immediately and then shield for the last 24 hours.

Comments

  • vudu3 wrote:
    it seems like the best course of action may be to start immediately and then shield for the last 24 hours.

    Vudu...that really depends on your roster and your goals for the tournament. If you aren't getting the results that you want, give something new a shot.

    I generally join early and push to about 300 on the first 12 hours. On the first full day, i tend to hover around 600-700 between pushes and retals. Then during the first 12 hours or the final day, i tend to make my push to my desired goal (generally between 1000-1100) and then shield for the duration.

    Play around and see what strategy works for your goals.

    Good luck/ marc
  • vudu3
    vudu3 Posts: 940 Critical Contributor
    edited May 2014
    I'm definitely hitting above my weight class--my top characters are Punisher (level 128, 4/4/4), Lazy Thor (level 102, 3/3/4) and Lazy Cap (level 100, 3/5/5). For the past few events I've been running with Lazy Thor, OBW (level 77, 3/5/4) and the featured character. I'm sure I'm getting hit frequently because I'm easy prey for team of maxed characters. But my top 3 characters don't have real good synergy so LT & OBW seem to be my best option.

    My goal is the same as almost everyone else--get a top 10 spot in my bracket so I can get 3 covers. icon_e_biggrin.gif
  • mischiefmaker
    mischiefmaker Posts: 932
    tl;dr: most likely this is a system limitation that could be fixed, but would be hard and might have bad side effects, so a design decision to leave it the way it is was made.

    My understanding is that this happens not when someone has started their fight against you before your shield was raised, but when their fight against you finishes before your shield was raised, but after the last time your client talked to the server. That is, in the situation you describe, the timeline looks like this:

    - 3 losses against you are reported to the server
    - Client talks to server, says, have I lost any fights? Server says yes, three. These fights display on your screen.
    - Last loss against you is reported to the server
    - You raise shield and spend a minute poking around doing things that don't require the client to talk to the server
    - The client asks the server again if you've lost any fights; server responds yes; this last loss displays.

    To answer the question of whether this is a system limitation or a deliberate design decision, we should ask, how would we fix the problem? You could make it so that the act of raising shields triggers a server call, but this is only slightly better -- you'd get a notification that you had a loss, but if you decide to raise shields anyway, you could take another loss before the server is notified that you raised shields, so all it'd be doing is shortening the window.

    You could make it so that the client is authoritative on whether the shield goes up first or the loss is registered, which eliminates the window, but it exposes all kinds of problems with client-side cheating (e.g., I just forge a request that says I put up the shield 5 minutes ago, and the server would be forced to undo all my losses in that span).

    The best solution I can think of is that a call to the server to raise shields causes any losses that have been reported to the server but not transmitted to the client to get zeroed out as though you were already shielded, since this mirrors your actual expectation. My guess is that this code is fairly complicated, and the developers are scared to touch it for fear of unexpected consequences (this is not a knock on their competence; I'd be terrified too), so they've decided to leave it be.

    Extra tl;dr for people who made it this far: software is hard.
  • As soon as you shield, click "event rewards", "player rank", "Your rank". That forces your device to update your score, placing, and shield status to the existing one as opposed to the 1-2 minute lag that sometimes exists when your device communicates with the game's system. So as long as you do that immediately you shouldn't have that problem anymore.
  • I'm pretty sure the case where you got hit after your shield is up is because the server was too slow to tell you that you already lost those points (prior to your shield is raised). Forcing an update would do nothing because all that'd do is let the server tell you 'oh yeah I forgot to tell you about the bad news!'
  • This just happened to me. When I am shield hopping I really expect the damn shields to work. This is the difference between 1 and 2nd.
  • To answer the question of whether this is a system limitation or a deliberate design decision, we should ask, how would we fix the problem? You could make it so that the act of raising shields triggers a server call, but this is only slightly better -- you'd get a notification that you had a loss, but if you decide to raise shields anyway, you could take another loss before the server is notified that you raised shields, so all it'd be doing is shortening the window.

    That's why systems in similar situation offer two options to ask for the transaction (shield): "just do it" or "do it if my score is still #1231". You chose the first to avoid more possible loss while processing the backquote, and the second when you are more interested in only shielding in some desired state -- if it not works out want to re-evaluate the situation and ask shield at the new known position or after playing some more.
    You could make it so that the client is authoritative on whether the shield goes up first or the loss is registered, which eliminates the window, but it exposes all kinds of problems with client-side cheating (e.g., I just forge a request that says I put up the shield 5 minutes ago, and the server would be forced to undo all my losses in that span).

    HUH? The communication with the server happens in (practically) real time and the request does not need timestamp at all -- only the above information and the point state for the second option.

    And for this game the server can (and absolutely should) track the account state in full, so accept only sensible requests. So forging would not help at all.
    software is hard.[/i]

    It can be hard really, but this stuff is well known for ages and is pretty far from hard really. And whoever can't figure it out by himself can just ask around. Our devs just don't give a damn about players' pain and frustration -- not limited to these relatively rare conditions.
  • Jjosh wrote:
    As soon as you shield, click "event rewards", "player rank", "Your rank". That forces your device to update your score, placing, and shield status to the existing one as opposed to the 1-2 minute lag that sometimes exists when your device communicates with the game's system. So as long as you do that immediately you shouldn't have that problem anymore.

    The race condition is always there the way we have it: the score can change in the window between the score packet left the server and the shielding request getting processed. For resolution you must send ahead the number, like in the atomic 'compare-and-swap' operations.
  • There's no race condition. The server already knows if your shield is raised on time or not. It's just the information you receive is delayed, but the server itself is perfectly clear on what your score ought to be. You can always check your leaderboard score prior to raising a shield since that information is up to date. Of course if you did that, you'll probably just find yourself getting hit in the time that you go and check your leaderboard score that could've been avoided if you just raised your shield right away!

    It might be a good idea if the server sends an immediate update after every game is over on your score. Sure, there's still a gap between the time between you finished your game and whenever you actually raised your shield, but that gap should be pretty small.
  • Sorry to go off topic but I was also at 990 in the last top gun tourney and with 1 minute left I figured I would break my shield and try to snatch 10 points to get the 1000 ISO progression, even if I don't finish on time worst case scenario I don't get the ISO. Had an easy match queued and played, It took me a bit over a minute to finish the match so it didn't count- whatever no bigs. What I didn't expect to see was that I was attacked and lost 45 points. Will someone clarify that for this to have happened I showed up in someone's queue and they went through the fight screens and managed to beat my team all within 1 minute? I guess it could happen...just thought it was highly unlikely. Any other way this could have happened? I thought when shielded you do not show up on queues anymore and while shielded the only way someone can attack you is through retaliation, is that correct? This is just for future reference so I know not to break shields. Thanks in advance for any verification anyone might have.
  • scottee
    scottee Posts: 1,610 Chairperson of the Boards
    Sorry to go off topic but I was also at 990 in the last top gun tourney and with 1 minute left I figured I would break my shield and try to snatch 10 points to get the 1000 ISO progression, even if I don't finish on time worst case scenario I don't get the ISO. Had an easy match queued and played, It took me a bit over a minute to finish the match so it didn't count- whatever no bigs. What I didn't expect to see was that I was attacked and lost 45 points. Will someone clarify that for this to have happened I showed up in someone's queue and they went through the fight screens and managed to beat my team all within 1 minute? I guess it could happen...just thought it was highly unlikely. Any other way this could have happened? I thought when shielded you do not show up on queues anymore and while shielded the only way someone can attack you is through retaliation, is that correct? This is just for future reference so I know not to break shields. Thanks in advance for any verification anyone might have.

    Someone could have had you as a retaliation and happened to fight you right before the tourney ended. They also could have queued you up earlier in case they needed a quick match at the end when you were still unshielded, but didn't fight the match until the last minute, like you did also.
  • Phantron wrote:
    There's no race condition. The server already knows if your shield is raised on time or not. It's just the information you receive is delayed

    <sigh> what we CALL the race condition. You base your action on old and potentially outdated information.
    Phantron wrote:
    , but the server itself is perfectly clear on what your score ought to be.

    And that score may not meet with the user's intent.
    Phantron wrote:
    You can always check your leaderboard score prior to raising a shield since that information is up to date.

    You can ask any amount of refreshes, you still work on outdated information -- that does not remove the race just makes the time window smaller.
    Phantron wrote:
    Of course if you did that, you'll probably just find yourself getting hit in the time that you go and check your leaderboard score that could've been avoided if you just raised your shield right away!

    That is one risk, but if you go for 3 covers and happen to spend HP on shield well below top10 is another kind of risk. And you can compensate the point loss by point gain, but can NOT compensate the loss of HP.

    That's why actual solution is needed not just a shaky half-workaround.
    Phantron wrote:
    It might be a good idea if the server sends an immediate update after every game is over on your score.
    Sure, there's still a gap between the time between you finished your game and whenever you actually raised your shield, but that gap should be pretty small.

    Obviously that information could be in the communication and appear -- there is hardly any sane reason to show inaccurate points on the first post-game screen instead of the actual one. And the two distinct use cases could be covered with really small amount of work too, instead of spooky prize animations, but it never seem to be devs priority.

    (and here you admit there's still the gap contradicting the starting statement icon_e_smile.gif
  • What I didn't expect to see was that I was attacked and lost 45 points.

    That's just bound to happen. What did you say you did? Pick a good easy match well before unshielding and played in the last minute. Well, someone else did the exact same thing with you. And played his last match for +49 points for a good jump. Just finished it in that last minute you unshielded -- probably started playing it minutes before.
  • last night I lost over 90 points soon after shielding. I know this stuff happens to everyone, but it's extremely annoying. You are using the premium currency to protect your score, and it doesn't necessarily do that.
    Whatever timing and communication issues there may be, it seems like the system would prioritize shielding because you have to invest HP and you don't get a do-over if you need to fight another fight to get your score back.

    Server: this guy got attacked, and their score dropped. tell them that their score dropped
    local system: you can't lower my score, I'm shielded now. this is what my score is supposed to be.
    Server: ok. *score goes back to what it shows on the players screen*

    It might be more complicated than that, but it really seems like a shield should preserve the score that it shows you when you put it up.
  • Server: this guy got attacked, and their score dropped. tell them that their score dropped
    local system: you can't lower my score, I'm shielded now. this is what my score is supposed to be.
    Server: ok. *score goes back to what it shows on the players screen*

    On a healthy system the server has all the state and the client is considered untrusted. Your idea would open the system to even more stupid exploits than we have now.