View Single Post
  #36  
Old 06-01-2008, 05:09 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Quote:
Originally Posted by TheLieka View Post
Ax - the submission thread for this is locked, could you move this code over for me?

I don't have a ton of time to document this, but it's well documented in the code. Long story short -
  • Warp detection is now done by velocity rather than just distance. The time measurement is taken between Player Position Update packets being received.
  • The velocity is taken by taking the distance / time since last PPU.
  • If the detector trips, it moves the player back to his previous PPU location.
  • Added the following rules:
    For Disabling MQDetector Penalties (Punishment for the player)
    For Disabling SQL Logging (haven't replaced it with text logging, but if it's a performance concern you can now disable it in the rules)
    For Disabling MQDetector Broadcast
    For Setting the Speed Limit (speed measured by units / second - this rule specifies the number of units a player is allowed to travel per second. From testing: 3-4 is level 50 SoW, 7 - 10 is GM Speed
  • Added 4 new items to #showstats:
    Last PPU Time: Indicates how long it was since the last PPU for the player (in hundredths of a second)
    Longest PPU Time: Records the longest time between PPUs for the player (in hundredths of a second)
    Current Movement Speed: Indicates the current movement speed of the player
    Highest Movement Speed: Indicates the highest movement speed of the player

That's pretty much it - the rest is the same as my original submission, but I think these updates should be what the code needed.

Let me know what you think.

Thanks,
Dax

This Diff was taken against 0.7.0-1102

...Removed code for size of quote
So, from looking at the source, it looks like the new eqemu binary code 1110 added in the detection from TZ/VZ, but it wasn't the most recent version of the detection which is noted in this quote. I updated to the latest 1110 code and so far it seems to be working very well. It has already detected some cheaters that I have confirmed are in fact cheaters. So far it looks great. I haven't seen any of the broadcasts and haven't heard any reports of players being punished by the tool, which are both fine with me. As far as I can tell, the only thing this does right now is log the MQ usage in the hackers table. Again, that is perfectly fine with me.

The reason I wanted to post here was to see if the latest updates on this code were under consideration for being added to the source. The last diff from TheLieka shows more features and probably better ways to detect warping and also catch more false positives. I could never get that diff to work properly with 1108. If TZ/VZ ever updates to 1110, I would love to see a diff from that with their latest anti-MQ code. I think it should be considerably less to change from 1102, since it now includes the MQ detection.

Also, I wanted to note that if anyone updates to the 1110, they will also want to add the rules listed below (and NOT the latest ones posted by TheLieka):

Code:
insert into rule_values values (0, Zone:EnableMQWarpDetector, true);
insert into rule_values values (0, Zone:EnableMQZoneDetector, true);
insert into rule_values values (0, Zone:EnableMQGateDetector, true);
insert into rule_values values (0, Zone:EnableMQGhostDetector, true);

insert into rule_values values (0, Zone:MQWarpExemptStatus, 50);
insert into rule_values values (0, Zone:MQGateExemptStatus, 50);
insert into rule_values values (0, Zone:MQZoneExemptStatus, 50);
insert into rule_values values (0, Zone:MQGhostExemptStatus, 50);

insert into rule_values values (0, Zone:MQWarpDetectorDistance, 30);
insert into rule_values values (0, Zone:MQWarpLagThreshold, 140);
insert into rule_values values (0, Zone:MQWarpThresholdTimer, 90000);
I didn't read through any of the actual source to see what all was added and what wasn't, I just read through the ruletypes.h to see what had rules added. Here is the source:

Code:
RULE_CATEGORY( Zone )
RULE_INT ( Zone,  NPCGlobalPositionUpdateInterval, 60000 ) //ms between intervals of sending a position update to the entire zone.
RULE_INT ( Zone,  ClientLinkdeadMS, 180000) //the time a client remains link dead on the server after a sudden disconnection
RULE_INT ( Zone,  GraveyardTimeMS, 1200000) //ms time until a player corpse is moved to a zone's graveyard, if one is specified for the zone
RULE_BOOL ( Zone, EnableShadowrest, 0 ) // enables or disables the shadowrest zone feature for player corpses. Default is turned off.
RULE_INT ( Zone, MQWarpExemptStatus, -1 ) //Lieka:  Required status level to exempt the MQWarpDetector.  Set to -1 to disable this feature.
RULE_INT ( Zone, MQZoneExemptStatus, -1 ) //Lieka:  Required status level to exempt the MQZoneDetector.  Set to -1 to disable this feature.
RULE_INT ( Zone, MQGateExemptStatus, -1 ) //Lieka:  Required status level to exempt the MQGateDetector.  Set to -1 to disable this feature.
RULE_INT ( Zone, MQGhostExemptStatus, -1 ) //Lieka:  Required status level to exempt the MGhostDetector.  Set to -1 to disable this feature.
RULE_BOOL ( Zone, EnableMQWarpDetector, true ) //Lieka:  Enable the MQWarp Detector.  Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQZoneDetector, true ) //Lieka:  Enable the MQZone Detector.  Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQGateDetector, true ) //Lieka:  Enable the MQGate Detector.  Set to False to disable this feature.
RULE_BOOL ( Zone, EnableMQGhostDetector, true ) //Lieka:  Enable the MQGhost Detector.  Set to False to disable this feature.
RULE_REAL ( Zone, MQWarpDetectorDistance, 4900 ) //Lieka:  Distance a player must travel between client to server location updates before a warp is registered.  30 allows for beyond GM speed without lag.
RULE_REAL ( Zone, MQWarpLagThreshold, 140 ) //Lieka:  Distance beyond the Zone:MQWarpDetectorDistance that a player must travel within the MQWarpThresholdTimer amount of time before tripping the MQWarp detector.  Set to 0 to disable this feature.
RULE_REAL ( Zone, MQWarpThresholdTimer, 90000 ) //Lieka:  Amount of time before the warp_threshold resets to the Zone:MQWarpLagThreshold value.  Default: 90000 (900 seconds/15 minutes).  Set to -1 to disable this feature.
RULE_CATEGORY_END()
Huge thanks for TheLieka and the TZ/VZ team for writing this code, and to KLS and anyone who helped get it added into the source. Like I said, so far it is great. I was just curious if the latest code from TheLieka has been tried and/or is under consideration for being added to the source.

Also, someone might want to stick the rules table updates into the log file along with the hacker table one that is already there.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote