Rewarp NPC for boss runs.

Discussion in 'Closed' started by Dawn, Oct 15, 2014.

  1. Wolf
    Offline

    Wolf Well-Known Member

    Joined:
    Mar 28, 2014
    Messages:
    97
    Likes Received:
    599
    IGN:
    Wolfix
    Level:
    200
    Adding to Ague's suggestion^
    I will personally report anyone who abuses this suggestion in the case it was made.
    And I bet any decent player would as well.
    It's absurd that a bunch of immature kids would ruin it for everyone who suffers from disconnects.
    Besides, a GM could theoretically monitor once every few runs, and then people would be even less willing to take the risk and abuse this.
    It's like in real life, the authorities can't monitor everything, it's up to the citizens as well to help maintain order and enforce laws.
     
    Christopher Chance, Dawn and Tommy like this.
  2. Sybe
    Offline

    Sybe Well-Known Member

    Joined:
    Apr 14, 2014
    Messages:
    803
    Likes Received:
    803
    Location:
    Fryslan
    Country Flag:
    IGN:
    Sybe
    Level:
    #1
    Guild:
    Fryslan
    Get the npc to only warp people in that are in the expedition but not in the zakum map. Make it remember that untill zakum is spawned or simpy 10 minutes after entering, which ever is easier. No abuse this way and no assistance needed from GMs.
     
    Andreas likes this.
  3. Dawn
    Offline

    Dawn Donator

    Joined:
    Aug 4, 2014
    Messages:
    119
    Likes Received:
    64
    IGN:
    Elluel
    Level:
    19x
    Guild:
    Honour
    There is light to every end of a tunnel, just like how the account sharing rule was being changed.

    I believe there is a way for this suggestion to work out well without the Staff putting in more workload into catching those abusers. Seen some great ideas in improvising this suggestion and hope the dev team will agree as well. Hopefully all these will shed some light.

    Thanks for all the inputs!
     
  4. Oldie
    Offline

    Oldie Well-Known Member

    Joined:
    Jun 6, 2014
    Messages:
    862
    Likes Received:
    259
    Location:
    PureNoob
    Country Flag:
    IGN:
    OldRanger
    Level:
    255
    Guild:
    Noobs
    Screw that.

    > Player A disconnected during Zakum/Horntail Session
    > Player A logs back in within 2 minutes. (I tried relogging, it takes 1 minute. I can provide a file that force quits the game if people complain that the game hangs extending the relog time.)
    > Player A gets swapped to the correct channel, Player A gets warped right back into battle.

    If they wanna leave, they do so from in-game. Not by DC/ing.

    Time limit the amount of re-warps they can get. EX: 1 rewarp due to dc every 10 minutes.

    This way they cannot abuse re-warps as a form of "hiding" while the big guys kill the boss.
     
  5. Oldie
    Offline

    Oldie Well-Known Member

    Joined:
    Jun 6, 2014
    Messages:
    862
    Likes Received:
    259
    Location:
    PureNoob
    Country Flag:
    IGN:
    OldRanger
    Level:
    255
    Guild:
    Noobs
    Don't have as much knowledge in TCP as I'd like to but, does the server ever disconnect players if the client stops sending packets for a period of time?

    I've tested and both closing via quit game or the window close function, the client sends a packet to the server declaring the close.
    I'm assuming the client will randomly decide to disconnect on its own and also send the disconnect packet to the server? This is why you can't differentiate?

    Player login script:
    protected void BossRewarp
    {

    int[][] x = ReadDB(Character.BossRunInProgress);
    int y = ReadDB(Character.isDead); //[0][0] holds true of false if the run is in progress. 0 = true 1 = false AND 0 = true 1 = false
    if ( (x[0][0] == 0) && (y == 1) )
    {
    int z = x[0][1]; //PQSession grabbed from cached DB entry


    ServerQuery.PQSession(z, this.CharacterName); //Checks server memory active Boss runs for necessary information.
    catch (error code 1) // Could not find PQ Session and or Player Eligibility.
    {
    DBWrite(Character.BossRunInProgress[0][0], 1);
    return;
    }
    PacketClientWarp(returnPQSessionLoc(z));
    }
    }
    ...

    It is quite possible. When you have full knowledge of your programming language, you can do virtually anything just limited by processing power and space.

    For the dying issue, that should be easily resolved by adding a login routine and editing the death handler. Since when someone dies the client sends the death animation to all the players, that goes through the server meaning the server can identify when a player is dead. This should be recorded in the database. If the player decides to D/C during death, the login routine should check for the value isdead or not, and if so, send the activate command to the death handler! The death handler should always set isDead back to 1 when it completes.
     
  6. Matt
    Offline

    Matt Administrator

    Joined:
    May 8, 2013
    Messages:
    15,345
    Likes Received:
    19,444
    Gender:
    Male
    Location:
    United Kingdom
    Country Flag:
    IGN:
    Matt
    Level:
    N/A
    Guild:
    Staff
    I understand that it is not impossible, but it is problematic, and adding even more SQL queries is not what we really want to do.

    I'd like to ask the OP what types of disconnection(s) this thread was initially referring to. Was it the disconnects caused by server instability?, the disconnects caused by graphical problems?, or both?
     
    Andreas likes this.
  7. Wolf
    Offline

    Wolf Well-Known Member

    Joined:
    Mar 28, 2014
    Messages:
    97
    Likes Received:
    599
    IGN:
    Wolfix
    Level:
    200
    Definitely both.
    But I think random crashes that are caused by poor internet connection or a random
    electrical blackout should be included as well.
    That's just my opinion though.
     
  8. Oldie
    Offline

    Oldie Well-Known Member

    Joined:
    Jun 6, 2014
    Messages:
    862
    Likes Received:
    259
    Location:
    PureNoob
    Country Flag:
    IGN:
    OldRanger
    Level:
    255
    Guild:
    Noobs
    Very true. You can forget about the database entries altogether. No point as a server crash would reset all PQs anyways and death states dont have to survive a server crash either.

    Why not use variables to temporarily store player PQ info in an array, as well as death info.

    Make the death array smaller. Make an index variable. Each recorded death will be stored in the next index. Everytime it reaches the last index it will start from index 0 again, overwriting old entries. The login handler will do a quick search for the charactername in the array, if it finds it, it warps the player to nearest town and sets the index's value to nul.

    the PQ array will have to be much larger, and self expand if it reaches a critical capacity.

    A bossPQ start would have to check if the player name is in the list. (if so, LOG an error message, as this means a bossPQ the player was in did not end when they left)
    then add the player name to the list, index x,0 player name x,1 PQID x,2 PQEndTime/Date x,3 time/date of last rewarp
    (where x would be primary index number)
    A bossPQ end would have to set the player entries to nul after the PQ ends.

    Summary:

    Add to login method:

    checkDeathnBossRewarp
    {
    _GetMapID(Check if the map is a BossMap);'
    _if(Map ID == boss map)
    _{
    __bool bossMap = true; //Variable
    _}
    _//<!-- Start Death Part
    _IF EXIST array.Search(deathArray, this.CharacterName);
    _{
    __if(bossMap == true)
    __{
    ___array.Search(bossPQArray, this.CharacterName); //Get the index of this player name
    ___array.Del(bossPQArray, (delete that index or set x (not a character name))); //The Player is deleted from the PQ for dying.

    ___warp(this.CharacterName, nearestTown); //The Player is warped out of PQ, well I guess this is already implemented somewhere.
    __}
    __else
    __{
    ___warp(this.CharacterName, nearestTown); //If the player is not on a boss map, normal warp to nearest town.
    ___array.Del(deathArray, (delete that index in the death array or set to not a charactr name)); //The Players death status is cleared.
    __}
    _}
    _//<-- End Death Part
    _
    _//<-- Start ReWarp Part
    _if (bossMap == true) //If it's a boss map but the player wasn't dead
    _{
    __array.Search(bossPQArray, this.CharacterName); //Get the index of this player name, store into variable index
    __string index;
    __if (bossPQArray[index][2] <= (The MaxDuration of PQ)) && (bossPQArray[index][3] <= array[index][2] + 10 minutes) //Basically security checks. second one __{________________________________________//being the security check if the player already d/ced a while ago for abuse checking.
    ___warp(this.CharacterName, PQMap); //This is assuming the PQ is set to kick players out when they relog.
    ___bossPQArray[index][3] = GetCurrentServerTime(); //Record security field #2
    __}
    _}
    _//<-- End ReWarp Part
    }


    P.S sorry for using handler and method and other words interchangeably.
     
  9. Dawn
    Offline

    Dawn Donator

    Joined:
    Aug 4, 2014
    Messages:
    119
    Likes Received:
    64
    IGN:
    Elluel
    Level:
    19x
    Guild:
    Honour
    It's more of graphical problems, for example windows and boss HP bars getting chopped off (I'm aware graphical problems exist back then in the older versions during boss runs so I'm not sure if there's a fix for it) and also the random disconnection without any errors.
     
  10. Tommy
    Offline

    Tommy Game Balancer

    Joined:
    May 16, 2014
    Messages:
    338
    Likes Received:
    2,000
    The Russia perspective. I agree, coming from a shitty internet connection user's perspective, it can be frustrating to use one of my two Zakum runs a day on 1 arm's worth of EXP, then disconnect through no fault of my own.
     
  11. Blasphemy
    Offline

    Blasphemy Donator

    Joined:
    Dec 7, 2014
    Messages:
    506
    Likes Received:
    364
    Gender:
    Male
    Location:
    Sweden
    Necroing this one..

    From playing some other Private Servers and seeing their solutions to d/c issues I think a good option would be a respawn in same map, if logged on within a short amount of time. So in this case an NPC would not be used but you'd simply end up in the same map automatically, if you log on the correct channel.

    I'm not sure about the technicalities why it works to cheat death with a simple relog, but as someone else mentioned it wouldn't be a problem among most people if you just made it bannable to abuse this.
     
    maggles likes this.

Share This Page