Go Back   EQEmulator Home > EQEmulator Forums > Support > Support::General Support

Support::General Support Post all topics here having to do with errors while trying to connect to an EQEMu server but not about the setup/running of the Server itself.

Reply
 
Thread Tools Display Modes
  #1  
Old 10-06-2008, 08:49 PM
beano311
Fire Beetle
 
Join Date: Sep 2008
Location: Philadelphia, Pa
Posts: 4
Default Warp Detection Error

Hope this is in the right forum...
Ok, so I was macro'ing on a server I wasn't supposed to be macro'ing on (using this version of MQ2) although MQ2 is allowed on the server. The macro I was using was a simple spell skill training macro, which I'll post below... I was running the macro on two characters (a beast lord and a mage), but also had a pure melee character just sitting there. So, the server admin saw the macro running while I was AFK and tried to summon the characters. The two that were running the macro would summon, then pop back to where they were left macro'ing right away... the other character, the one that wasn't running the macro would summon normally. Seeing this, the server admin thought I was using the MQ2 warp plugin and banned my accounts.
Now, I know for a fact that the warp plugin is not included in any builds of MQ2 found on the macroquest 2 website and I did not modify anything before compiling it, and I will post the macro I was running bellow for further reference.
On top of this incident, there were several other /warp triggers found on the admin's server hacker log, most of which were from a time I wasn't even running the macro.
So, that's what happened... My thoughts on how the errenous /warp triggers showed up are this, but please, someone correct me if I'm wrong, or provide any other answers:
I was three boxing, the beast and mage were in the background when I went afk, with window focus being on the rogue. I know if I set a character on /follow then switch to the character being followed, the character following appears to follow very jumpily. If you stop walking on the followed character, the following character sometimes continues walking past the stopped character, then disappears and reappears in the correct location, behind the followed character. This looks like it could be seen as a warp, at least from what it looks like. I also know that MQ2 has a program built in called EQPlayNice, which essentially makes EQ more resource friendly, so that if you're running EQ in a window and want to switch over to a web browser, the number of CPU cycles available to EQ are reduced, allowing better performance on any application other than EQ. So, if I have one EQ window focused, the others are going to be slowed down to allow the focused EQ window to run more smoothly.
What I think happens is something similar to what happens when /follow is on and the following character is jumping around... the character was summoned, but because of client lag, the loc update was never updated on the client, only the server. And if what I understand about how the MQ warp plugin works is correct (changes character's loc in the client's memory), that would mean that whatever the client says, goes... at least on character locations.
So, that's what I think, anyone else think anything different? I just want to know why something like that would happen... I was lucky enough to get the accounts unbanned, thanks to an understanding admin.
Thanks to anyone that comments,
beano311
Reply With Quote
  #2  
Old 10-06-2008, 08:54 PM
beano311
Fire Beetle
 
Join Date: Sep 2008
Location: Philadelphia, Pa
Posts: 4
Default

Here's the code, assuming I'm allowed to post it here...

SpellTrain.mac
Code:
#define MaxArcaneSkill 235
#chat tell
#event lang "tells you"

#include SpellCast.inc

Sub Main

    /declare currentSpell
    /declare maxSkill
    /declare skillName
    /declare spellName

    /echo Starting SpellTrain.mac!
    /echo Abjuration: ${Me.Skill[Abjuration]}
    /echo Alteration: ${Me.Skill[Alteration]}
    /echo Channeling: ${Me.Skill[Channeling]}
    /echo Conjuration: ${Me.Skill[Conjuration]}
    /echo Evocation: ${Me.Skill[Evocation]}
    /echo Meditate: ${Me.Skill[Meditate]}
   
    /varset currentSpell 1
    /varset maxSkill ${Math.Calc[${Me.Level}*5+5]}
    /if ( ${maxSkill} > 235 ) /varset maxSkill 235
    /echo maxSkill=${maxSkill}

    /target myself
   
    :nextSpell
        /echo currentspell=${currentSpell}
        /echo casting=${Me.Gem[${currentSpell}]}
        /if ( ${Bool[${Me.Gem[${currentSpell}]}]} ) {
            /varset skillName ${Me.Gem[${currentSpell}].Skill}
            :castSpell
                /doevents
                /if ( ${Me.PctMana}<20) {
                    /sit on
                    /call MedBreak
                }
                /if ( ${Me.Skill[${skillName}]} >= ${maxSkill} ) {
                    /varset currentSpell ${Math.Calc[${currentSpell}+1]}
                    /goto :nextSpell
                }
                /call CheckGM
                /call cast "${Me.Gem[${currentSpell}]}"
               
                :checkCursor
                /if (${Cursor.ID}) {
                    /autoinv
                    /goto :checkCursor
                }
            /goto :castSpell
        }
   
    /sit
    /call MedBreak
    /camp
/return

Sub CheckGM
    :GMCheck
    /if (${Bool[${Spawn[gm].ID}]}) {
       /echo 'Cast Macro' A GM or Guide has been detected in the zone,  the macro will resume  when the zone is clear of GM/Guides
       /delay 600s
       /goto :GMCheck
    }
/return

Sub Event_Chat
  /echo Got a tell, pausing for 10 minutes
  /delay 600s
/return

Sub Event_Lang
  /echo Got a tell, pausing for 10 minutes
  /delay 600s
/return

Sub MedBreak
    /stand
    /sit
    :MedMore
        /delay 2s
        /if (${Me.CurrentMana}<${Me.MaxMana}) /goto :MedMore
/return
SpellCast.inc
Code:
|
| SpellCast.inc
|
| Last Modified: 5/14/2004 9:30pm
| This will cast a spell reliably for you...
|
| Usage:
|       /call Cast "spellname|itemname|AA#|AAskillname" [item|activate|gem#] [nocheck|dismount|nodismount]
|
| If no dismount or nodismount is provided it defaults to nodismount.
|
| This would essentially: /cast "Death Peace"
| example: /call Cast "Death Peace"
|
| This would essentially: Check for the spell in your spell slots, if not there mem it to spell
|                         gem slot 7 and then /cast "Death Peace"
| example: /call Cast "Death Peace" gem7
|
| This would essentially: /cast item "White Rope Bridle"
| example: /call Cast "White Rope Bridle" item
|
| This would essentially: /alt activate 169
| example: /call Cast "169" activate
|  or...
| example: /call Cast "Divine Arbitration" activate
|
| This would dismount if your target was lost or dies mid-cast, cast Burn and mem it to spell
| slot 3 if it wasn't already memmed:
| example: /call Cast "Burn" gem3 dismount
|
| This would not dismount but would move you back and forth if your target was lost or dies mid-cast, cast Burn and mem
| it to spell slot 3 if it wasn't already memmed:
| example: /call Cast "Burn" gem3 nodismount
|
| 'nocheck' is the default for the "loss of target/target dying" value.  If nocheck is specified (Or nothing was specified)
| no target checking will be performed and spellcast.inc should act like the spellcast.inc of the past.
|
| It will return the following values:
| CAST_SUCCESS
| CAST_UNKNOWNSPELL
| CAST_OUTOFMANA
| CAST_OUTOFRANGE
| CAST_CANNOTSEE
| CAST_STUNNED
| CAST_RESISTED
| CAST_TOOK2LONG
| CAST_ABILITYNOTREADY
| CAST_IMMUNESLOW
| CAST_LOSTTARGET
|
| New Vars Modification
| Plazmic's no globals needed version
|
| Oct 09, 2003 - Updated to work with new vars and $char(casting) -gf

| Oct 11, 2003 - switched some logic, removed defines -gf
| Oct 15, 2003 - Item support added by -EqMule
| XXX xx, xxxx - Modified to add automeming of spells. -Goofmester1
| Dec 26, 2003 - fd fail 1 added -m0nk
| Jan 01, 2004 - timeout(5s) added to stop "dead-time" -m0nk
| Jan 01, 2004 - switchd fdfail to a standing check. -m0nk
| Jan 01, 2004 - added silence checking as a stun check -m0nk
| Feb 17, 2004 - added AA activate capabilities -ml2517
| Apr 11, 2004 - Updated for new Parm system -ml2517
| Apr 12, 2004 - Will spit out a different message on immune to slows. -ml2517
| Apr 16, 2004 - Removed /sendkeys and replaced with /keypress. -ml2517
| Apr 17, 2004 - Various code enhancements. -Wassup
| Apr 20, 2004 - Updated all of the /if's to have parenthesis. -ml2517
| Apr 25, 2004 - Updated to new variable system. -ml2517
| Apr 29, 2004 - Fixed Item problem -ml2517
| Apr 29, 2004 - Changed the alt ability to use AltAbilityReady instead of an event. -ml2517
| May 02, 2004 - Added the ability to specify a gem slot to mem spells to. -ml2517
| May 10, 2004 - Updated for new event system.
| May 12, 2004 - Added suggestions for loss of target and stun handling change. -ml2517
| May 13, 2004 - Activate now accepts AA skill by name or number. -ml2517
| May 14, 2004 - Added the nocheck value, it is the default. This bypasses the target checking code. -ml2517
|

#event Fizzle "#*#Your spell fizzles#*#"
#event Interrupt "#*#Your casting has been interrupted#*#"
#event Interrupt "#*#Your spell is interrupted.#*#"
#event Recover "#*#You haven't recovered yet...#*#"
#event Recover "#*#Spell recovery time not yet met.#*#"
#event Resisted "#*#Your target resisted the #*#"
#event OutOfMana "#*#Insufficient Mana to cast this spell!#*#"
#event OutOfRange "#*#Your target is out of range, get closer!#*#"
#event NoLOS "#*#You cannot see your target.#*#"
#event Stunned "#*#You cannot cast while stunned#*#"
#event Stunned "#*#You *CANNOT* cast spells, you have been silenced!#*#"
#event Standing "#*#You must be standing to cast a spell#*#"
#event Standing "#*#has fallen to the ground.#*#"
#event Collapse "#*#Your gate is too unstable, and collapses.#*#"
#event ImmuneSlow "#*#Your target is immune to changes in its attack speed.#*#"


Sub Cast(SpellName,ItemFlag,DismountFlag)
   /declare HaveTarget int local 0
   /declare CastBarTime timer local
   /declare CastCurrLocY float local 0
   /declare CastCurrLocX float local 0
   /varset CastCurrLocY ${Me.Y}
   /varset CastCurrLocX ${Me.X}
   /if (${Target.ID}>0) /varset HaveTarget 1
   /if (!${Defined[CastGiveUpTime]}) /declare CastGiveUpTime timer local
   /if (!${Defined[ItemFlag]}) /declare ItemFlag string local
   /if (!${Defined[DismountFlag]}) {
       /declare DismountFlag string local nocheck
       /if (${ItemFlag.Find["dismount"]}) /varset DismountFlag ${ItemFlag}
   }
   /if (!${Me.Standing} && !${Me.Mount.ID}>0) /stand
   /if (${Me.Moving}) {
       /keypress forward
       /keypress back
       /delay 8
   } else {
       /delay 4
   }
   /if (${ItemFlag.Equal["Item"]} || ${ItemFlag.Equal["Activate"]}) /goto :StartCast

   /if (!${Me.Gem["${SpellName}"]}) {
       /if (${ItemFlag.Find[gem]}) {
           /if (${Int[${ItemFlag.Right[1]}]}>0 && ${Int[${ItemFlag.Right[1]}]}<9) {
               /memspell ${ItemFlag.Right[1]} "${SpellName}"
               /delay 5s
           } else {
               /goto :GenericMem
           }
       } else {       
           :GenericMem
           /memspell 5 "${SpellName}"
           /delay 5s
       }

   }
   :StartCast
      /varset CastGiveUpTime 5s
   :CastNow
      /if (${ItemFlag.Equal["Item"]}) {
         /call ClearReturnValue
         /cast item "${SpellName}"
      } else /if (${ItemFlag.Equal["Activate"]}) {
         /call ClearReturnValue
         /if (!${Me.AltAbilityReady[${SpellName}]}) /return CAST_ABILITYNOTREADY
         /alt activate ${AltAbility[${SpellName}].ID}
         /varset CastBarTime ${Me.Casting.CastTime}
      } else {
         /if (!${Me.Gem["${SpellName}"]}) /return CAST_UNKNOWNSPELL
         /call ClearReturnValue
         /if (!${Me.SpellReady["${SpellName}"]}) {
            /if (${CastGiveUpTime}==0) /return CAST_TOOK2LONG
            /delay 1
            /goto :CastNow
         }
         /cast "${SpellName}"
         /varset CastBarTime ${Math.Calc[${Me.Casting.CastTime}*10]}
      }
   :WaitCast
      /if (${Me.Casting.ID}) {
         /if ((!${Target.ID}>0 || ${Target.Type.Equal[CORPSE]}) && !${DismountFlag.Find[nocheck]} && ${HaveTarget}==1) {
             /if (${Me.Mount.ID}>0) {
                 /if (${DismountFlag.Equal[dismount]}) {
                     /dismount
                 } else {
                     /if (!${ItemFlag.Equal["Item"]}) {
                         /if (${CastBarTime}<7) {
                             :Interrupt
                             /keypress FORWARD hold
                             /delay 6
                             /keypress FORWARD
                             /keypress BACK hold
                             /delay 8
                             /keypress BACK
                         } else {
                             :HoldForSpell
                             /delay 1
                             /if (${CastBarTime}<7) /goto :Interrupt
                             /goto :HoldForSpell
                         }
                     } else {
                         /keypress FORWARD hold
                         :Forward
                         /delay 1
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}<6) /goto :Forward
                         /keypress FORWARD
                         /keypress BACK hold
                         :Backward
                         /delay 1
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}>4) /goto :Backward
                         /keypress BACK
                         /if (!${Me.Casting.ID}>0) /goto :DuckTime
                     }
                 }
             }
             :DuckTime
             /keypress FORWARD
             /keypress BACK
             /if (!${Me.Ducking}) /keypress DUCK
             /delay 1
             /if (${Me.Ducking}) /keypress DUCK
             /return CAST_LOSTTARGET
         }
         /delay 1
         /goto :WaitCast
      }
   /delay 4
   /doevents Fizzle
   /doevents Interrupt
   /doevents Interrupt
   /doevents Recover
   /doevents Standing
   /doevents OutOfRange
   /doevents OutOfMana
   /doevents NoLOS
   /doevents Resisted
   /doevents ImmuneSlow
   /doevents Stunned
   /doevents Collapse
   /delay 1
   /if (${Macro.Return.Equal["CAST_RESTART"]}) /goto :StartCast
   /if (!${Macro.Return.Equal["NULL"]}) /return ${Macro.Return}
/return CAST_SUCCESS

Sub ClearReturnValue
/return NULL

Sub Event_Fizzle
/return CAST_RESTART

Sub Event_Interrupt
/return CAST_RESTART

Sub Event_Recover
   /delay 5
/return CAST_RESTART

Sub Event_Standing
   /stand
/return CAST_RESTART

Sub Event_Collapse
/return CAST_RESTART

Sub Event_OutOfMana
/return CAST_OUTOFMANA

Sub Event_OutOfRange
/return CAST_OUTOFRANGE

Sub Event_NoLOS
/return CAST_CANNOTSEE

Sub Event_Stunned
   /delay 2s !${Me.Stunned}
/return CAST_RESTART

Sub Event_Resisted
/return CAST_RESISTED

Sub Event_ImmuneSlow
/return CAST_IMMUNESLOW
Reply With Quote
  #3  
Old 10-07-2008, 12:05 AM
MNWatchdog
Hill Giant
 
Join Date: Feb 2006
Posts: 179
Default

If I remember right, the Warp detector can be setup to just move you back to originating spot that the detector thinks youve warped from. It determins a warp based sudden movement and then eliminates sudden movements caused by certain spells being used like Shadowstep, Gating inside the same zone, etc.

Since the detector probably noted you were casting a spell at the same time the GM summoned you, it may have gone to the code to validate that the spell you were casting may trigger a false warp detection and not never reached the code that checked for summons, thus setting off false warp detection.

Someone more familiair with the code would have to check if this is possible.

I know it used to go off right and left if mobs would shadow step you or summon you from a distance. Not sure if this has been fixed.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 04:30 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3