MAT Automaton
By dB
Introduction
MAT Automaton is a framework that employs the Python 3 interpreter to allow MAT players to script the behaviour of their player. With Pyreal, MAT Automaton provides tight bindings with the Unreal Engine. As a result, it is possible to write code similar to Unreal Script with full access to Unreal Engine internals. MAT Automaton includes an in game command line console and a graphical menu. A sample aimbot/wallhack script is included, but users are encouraged to modify it or write their own.
Changes in this version- launcher now reads server information from autoupdate.ini
- added CIB support to core module
- upgraded Python to 3.1.3
- added builtin Python modules (ctypes, ssl, etc)
- minor Pyreal improvements
Instructions
1. Start the launcher via the shortcut in the start menu.
2. If you are running Windows XP or Vista/W7 with
UAC disabled, start the game and the injection will be performed automatically. Otherwise, MAT Automaton will ask you for the location of of your MAT executable (MAT.exe) (e.g. \Program Files\MAT\System\MAT.exe)
Press END to access the menu.
Press INSERT to access the console.
Press NUMPAD 0 to toggle auto aim.
Press NUMPAD 1 to toggle indicator wallhack.
Press NUMPAD 2 to toggle wireframe wallhack.
Press NUMPAD 3 to toggle auto firing.
The scripts are located in the directory "Scripts" accessible from the installation path.
For an introduction to Python refer to
More importantly for a reference on the Unreal Engine refer to
I would love to see others contribute scripts, as the goal of this project is to see what types of creative things people come up with.
Here is a snippet of the included script, just to whet your appetite:
Code:
# Look for the best target (by health)
BestPawn = None
BestLocation = None
for Pawn in PC.DynamicActors ( PawnClass, PC ):
# Check if the pawn is valid
if ( not self.Valid ( Pawn ) or Pawn == PC.Pawn or not self.Damagable ( Pawn ) ): continue
# If it is a team game make sure we are on a different team
if ( not self.FriendlyFire and self.SameTeam ( Pawn ) ): continue
# Find a visible bone
for bone in [ Pawn.HeadBone, Pawn.RootBone ]:
# Fetch the bone coords
BoneCoords = Pawn.GetBoneCoords ( bone )
# Calculate the location
BoneLocation = BoneCoords.Origin + BoneCoords.XAxis + BoneCoords.YAxis + BoneCoords.ZAxis
# Conditionally apply latency correction
if ( self.LatencyCorrection ):
BoneLocation += self.Correction ( PC, Pawn, deltatime )
# Adjust according to projectile physics
if ( PC.Pawn.Weapon and PC.Pawn.Weapon.FireMode [ FireMode ] and PC.Pawn.Weapon.FireMode [ FireMode ].ProjectileClass ):
Projectile = PC.Pawn.Weapon.FireMode [ FireMode ].ProjectileClass.Default
if ( Projectile and Projectile.Speed != 0 and Projectile.Physics != PHYS_Falling ):
BoneLocation += Pawn.Velocity * ( abs ( BoneLocation - CameraLocation ) / Projectile.Speed )
# Do the check
if ( Pawn.FastTrace ( BoneLocation, CameraLocation ) ):
# Is this the best one?
if ( not BestPawn or Pawn.Health < BestPawn.Health ):
BestPawn = Pawn
BestLocation = BoneLocation
break
if ( BestPawn ):
# We've found a valid target, so lets set the rotation and fire as required
PC.ClientSetRotation ( ( BestLocation - CameraLocation ).Normal ().Rotation () )
if ( self.AutoFire and PC.Pawn.Weapon ): PC.Pawn.Weapon.ClientStartFire ( FireMode )