├── README.md ├── download.sh ├── native └── jogl_patch.txt ├── src └── me │ └── lixko │ └── csgoexternals │ ├── Client.java │ ├── CommandManager.java │ ├── ConfigManager.java │ ├── Engine.java │ ├── EventHandler.java │ ├── JOGL2Renderer.java │ ├── KeyboardHandler.java │ ├── Main.java │ ├── ModuleManager.java │ ├── elf │ ├── Elf.java │ ├── ElfModule.java │ └── GameInterface.java │ ├── midi │ └── MidiInput.java │ ├── modules │ ├── AimBot.java │ ├── AimBotGhetto.java │ ├── AutoDefuse.java │ ├── AutoJoinCT.java │ ├── AutoPlant.java │ ├── BoneESP.java │ ├── Bunnyhop.java │ ├── CrosshairDot.java │ ├── DisablePP.java │ ├── DownloadFixer.java │ ├── EyeTrace.java │ ├── FOVChanger.java │ ├── FollowPath.java │ ├── Glow.java │ ├── MapRender.java │ ├── Module.java │ ├── MousePath.java │ ├── MousePathNetprop.java │ ├── NameHUD.java │ ├── NoFlash.java │ ├── NoHands.java │ ├── PianoBot.java │ ├── RCS.java │ ├── RankReveal.java │ ├── RecoilCross.java │ ├── SkinChanger.java │ ├── Spectators.java │ ├── TestModule.java │ └── VisibleTest.java │ ├── offsets │ ├── AttributableItemType.java │ ├── Convar.java │ ├── Convars.java │ ├── InputOffsets.java │ ├── ItemDefinitionIndex.java │ ├── NetvarDumper.java │ ├── Netvars.java │ ├── Offsets.java │ └── PatternScanner.java │ ├── sdk │ ├── BSPFile.java │ ├── BoneList.java │ ├── Const.java │ ├── DemoFormat.java │ ├── ObsMode.java │ └── Studio.java │ ├── structs │ ├── BaseAttributableItem.java │ ├── CEntInfo.java │ ├── CGlobalVars.java │ ├── CGlowObjectManager.java │ ├── CSPlayerResource.java │ ├── CUtlVector.java │ ├── ClientClass.java │ ├── ClientClassBufStruct.java │ ├── ExampleBufChild.java │ ├── ExampleBufClass.java │ ├── ExampleBufStruct.java │ ├── GlowObjectDefinition.java │ ├── Matrix3x4Mem.java │ ├── Matrix4x4Mem.java │ ├── MemStruct.java │ ├── Mstudiobone_t.java │ ├── Mstudioseqdesc_t.java │ ├── PlayerInfo.java │ ├── QAngle.java │ ├── QuaternionMem.java │ ├── RecvProp.java │ ├── RecvPropB.java │ ├── RecvTable.java │ ├── RecvTableB.java │ ├── StructField.java │ ├── Studiohdr_t.java │ ├── VectorMem.java │ └── user_regs_struct.java │ ├── themes │ └── BasicTheme.java │ └── util │ ├── BufferStruct.java │ ├── ChatColor.java │ ├── DrawUtils.java │ ├── FileUtil.java │ ├── FontRenderer.java │ ├── GLGraph.java │ ├── GLTrace.java │ ├── HttpDownloadUtility.java │ ├── Injector.java │ ├── LocalPlayerPosition.java │ ├── MathUtils.java │ ├── MemoryUtils.java │ ├── MsgPriority.java │ ├── PID.java │ ├── Profiler.java │ ├── ProfilerUtil.java │ ├── StringFormat.java │ ├── TextAlign.java │ ├── Texture.java │ ├── UnixDefs.java │ ├── WMCtrl.java │ ├── XKeySym.java │ ├── bsp │ ├── BSPParser.java │ ├── BSPRenderer.java │ ├── Camera.java │ ├── Image.java │ ├── Shader.java │ └── ShaderManager.java │ └── demo │ ├── ArrayDataStream.java │ ├── DataStream.java │ ├── DemoParser.java │ ├── ProtoBuf.java │ └── SendTable.java ├── start.sh └── textures ├── bomb.png ├── defuser.png ├── ranks ├── dmg.png ├── global.png ├── gold-1.png ├── gold-2.png ├── gold-3.png ├── gold-master.png ├── legendary-eagle.png ├── lem.png ├── master-guardian-1.png ├── master-guardian-2.png ├── mge.png ├── sem.png ├── silver-1.png ├── silver-2.png ├── silver-3.png ├── silver-4.png ├── silver-5.png └── smfc.png ├── weapons ├── item_assaultsuit.png ├── item_defuser.png ├── item_kevlar.png ├── weapon_ak47.png ├── weapon_aug.png ├── weapon_awp.png ├── weapon_bizon.png ├── weapon_c4.png ├── weapon_cz75a.png ├── weapon_deagle.png ├── weapon_decoy.png ├── weapon_elite.png ├── weapon_famas.png ├── weapon_fiveseven.png ├── weapon_flashbang.png ├── weapon_g3sg1.png ├── weapon_galilar.png ├── weapon_glock.png ├── weapon_hegrenade.png ├── weapon_hkp2000.png ├── weapon_incgrenade.png ├── weapon_knife.png ├── weapon_knife_bayonet.png ├── weapon_knife_butterfly.png ├── weapon_knife_falchion.png ├── weapon_knife_flip.png ├── weapon_knife_gut.png ├── weapon_knife_karambit.png ├── weapon_knife_m9_bayonet.png ├── weapon_knife_push.png ├── weapon_knife_t.png ├── weapon_knife_tactical.png ├── weapon_m249.png ├── weapon_m4a1.png ├── weapon_m4a1_silencer.png ├── weapon_mac10.png ├── weapon_mag7.png ├── weapon_molotov.png ├── weapon_mp7.png ├── weapon_mp9.png ├── weapon_negev.png ├── weapon_nova.png ├── weapon_p250.png ├── weapon_p90.png ├── weapon_revolver.png ├── weapon_sawedoff.png ├── weapon_scar20.png ├── weapon_sg556.png ├── weapon_smokegrenade.png ├── weapon_ssg08.png ├── weapon_taser.png ├── weapon_tec9.png ├── weapon_ump45.png ├── weapon_usp_silencer.png └── weapon_xm1014.png └── weapons_outline ├── item_assaultsuit.png ├── item_defuser.png ├── item_kevlar.png ├── weapon_ak47.png ├── weapon_aug.png ├── weapon_awp.png ├── weapon_bizon.png ├── weapon_c4.png ├── weapon_cz75a.png ├── weapon_deagle.png ├── weapon_decoy.png ├── weapon_elite.png ├── weapon_famas.png ├── weapon_fiveseven.png ├── weapon_flashbang.png ├── weapon_g3sg1.png ├── weapon_galilar.png ├── weapon_glock.png ├── weapon_hegrenade.png ├── weapon_hkp2000.png ├── weapon_incgrenade.png ├── weapon_knife.png ├── weapon_knife_bayonet.png ├── weapon_knife_butterfly.png ├── weapon_knife_falchion.png ├── weapon_knife_flip.png ├── weapon_knife_gut.png ├── weapon_knife_karambit.png ├── weapon_knife_m9_bayonet.png ├── weapon_knife_push.png ├── weapon_knife_t.png ├── weapon_knife_tactical.png ├── weapon_m249.png ├── weapon_m4a1.png ├── weapon_m4a1_silencer.png ├── weapon_mac10.png ├── weapon_mag7.png ├── weapon_molotov.png ├── weapon_mp7.png ├── weapon_mp9.png ├── weapon_negev.png ├── weapon_nova.png ├── weapon_p250.png ├── weapon_p90.png ├── weapon_revolver.png ├── weapon_sawedoff.png ├── weapon_scar20.png ├── weapon_sg556.png ├── weapon_smokegrenade.png ├── weapon_ssg08.png ├── weapon_taser.png ├── weapon_tec9.png ├── weapon_ump45.png ├── weapon_usp_silencer.png └── weapon_xm1014.png /README.md: -------------------------------------------------------------------------------- 1 | # Java CS:GO Externals 2 | External Linux Java cheats for CS:GO with OpenGL overlay. 3 | 4 | ### Download: 5 | Create a directory and run this inside. **It downloads all dependencies** and the latest release. 6 | ``` 7 | wget -N -q https://raw.githubusercontent.com/ericek111/java-csgo-externals/master/download.sh 8 | chmod +x download.sh 9 | ./download.sh 10 | ``` 11 | Start by running `sudo ./start.sh` in the install folder. 12 | 13 | ### Commands: 14 | You can bind commands to keys using `bind [key] [command]`. You can get the keycode from [XKeySym.java class](src/me/lixko/csgoexternals/util/XKeySym.java). 15 | **Example:** `bind Alt_L glow toggle` 16 | 17 | `bind [key] [command]` - Bind command to key. 18 | `bind [key] -` - Delete bound command. 19 | `bind [key]` - View bound command. 20 | `[module] toggle` - Toggles module (case-insensitive name). 21 | `exec [filename]` - Executes macro file in `[installdir]/scripts` folder. One command per line. 22 | `restart` - Restart the whole cheatpack without leaving game. 23 | `restartjs` - Restart JavaScript engine (after changing JS modules). (JS engine WIP) 24 | 25 | Check out [me.lixko.csgoexternals.CommandManager](src/minecraft/me/lixko/csgoexternals/CommandManager.java) for the rest of commands. 26 | 27 | ### Troubleshooting 28 | If the cheat (or its features) doesn't work for you, please, [open a new issue](https://github.com/ericek111/java-csgo-externals/issues/new) and let me know! 29 | Some compositors have problems with my [click-through transparent overlay](https://github.com/ericek111/java-csgo-externals/blob/master/native/jogl_patch.txt). You can use `-nooverlay` command line argument to disable it. This way you only get BunnyHop and Glow tho. 30 | 31 | ### Dependencies 32 | - [**Java Memory Manipulation**](https://github.com/ericek111/Java-Memory-Manipulation) - Memory library for reading, parsing and writing to the process memory. [Download JAR and dependencies.](https://github.com/ericek111/Java-Memory-Manipulation/releases/tag/2.2) 33 | - [fastutil](http://fastutil.di.unimi.it/) extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues. [Download JAR.](http://repo1.maven.org/maven2/it/unimi/dsi/fastutil/7.1.0/fastutil-7.1.0.jar) 34 | - [Zero-allocation Hashing](https://github.com/OpenHFT/Zero-Allocation-Hashing) for Java. [Download JAR.](http://repo1.maven.org/maven2/net/openhft/zero-allocation-hashing/0.8/zero-allocation-hashing-0.8.jar) 35 | - [Java Native Access (JNA)](https://github.com/java-native-access/jna) as the backbone for interfacing with native libraries. You can download precompiled files from [their GitHub](https://github.com/java-native-access/jna#download) - you need both *jna-4.x.0.jar* and *jna-platform-4.x.0.jar*. 36 | - [JOGL](https://github.com/sgothel/jogl) - Java™ Binding for the OpenGL® API. 37 | - Native X11 wrapper needs to be **patched** by jogl_patch.txt. You need to download both [jogl-all.jar](https://github.com/ericek111/java-csgo-externals/releases/download/1.0/jogl-all.jar) and [jogl-all-natives-linux-amd64.jar](https://github.com/ericek111/java-csgo-externals/releases/download/1.0/jogl-all-natives-linux-amd64.jar). 38 | - [Gson](https://github.com/google/gson) - A Java serialization/deserialization library that can convert Java Objects into JSON and back. [Download JAR.](https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar) 39 | 40 | ### Credits 41 | Thank you, [**ekknod**](https://github.com/ekknod), for your work on external interface parsing and convar editing in your [CS:GO external SDK](https://github.com/ekknod). 42 | 43 | -------------------------------------------------------------------------------- /native/jogl_patch.txt: -------------------------------------------------------------------------------- 1 | --- ./jogl_orig/src/newt/native/X11Window.c 2017-03-16 00:30:46.273713168 +0100 2 | +++ ./jogl/src/newt/native/X11Window.c 2017-03-16 22:13:05.517985743 +0100 3 | @@ -33,6 +33,8 @@ 4 | */ 5 | 6 | #include "X11Common.h" 7 | +#include 8 | +#include 9 | 10 | #ifdef VERBOSE_ON 11 | #define DUMP_VISUAL_INFO(a,b) _dumpVisualInfo((a),(b)) 12 | @@ -834,7 +836,7 @@ 13 | 14 | attrMask = ( CWBackingStore | CWBackingPlanes | CWBackingPixel | 15 | CWBackPixmap | CWBackPixel | CWBorderPixel | CWColormap | 16 | - CWOverrideRedirect | CWEventMask ) ; 17 | + CWOverrideRedirect | CWEventMask | CWEventMask | CWWinGravity | CWBitGravity | CWSaveUnder | CWDontPropagate ) ; 18 | 19 | memset(&xswa, 0, sizeof(xswa)); 20 | xswa.backing_store=NotUseful; /* NotUseful, WhenMapped, Always */ 21 | @@ -844,12 +846,20 @@ 22 | xswa.background_pixel = BlackPixel(dpy, scrn_idx); 23 | xswa.border_pixel = 0; 24 | xswa.colormap = XCreateColormap(dpy, windowParent, visual, AllocNone); 25 | - xswa.override_redirect = False; // use the window manager, always (default) 26 | + xswa.override_redirect = 1; // use the window manager, always (default) 27 | + 28 | + 29 | xswa.event_mask = X11_MOUSE_EVENT_MASK; 30 | xswa.event_mask |= KeyPressMask | KeyReleaseMask ; 31 | xswa.event_mask |= FocusChangeMask | SubstructureNotifyMask | StructureNotifyMask | ExposureMask; 32 | // xswa.event_mask |= VisibilityChangeMask; 33 | 34 | + xswa.save_under = 1; 35 | + xswa.event_mask = StructureNotifyMask|ExposureMask|PropertyChangeMask|EnterWindowMask|LeaveWindowMask|KeyPressMask|KeyReleaseMask|KeymapStateMask; 36 | + xswa.do_not_propagate_mask = KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|ButtonMotionMask; 37 | + xswa.win_gravity = NorthWestGravity; 38 | + xswa.bit_gravity = ForgetGravity; 39 | + 40 | { 41 | int _x = x, _y = y; // pos for CreateWindow, might be tweaked 42 | if( TST_FLAG_IS_AUTOPOSITION(flags) ) { 43 | @@ -930,7 +940,7 @@ 44 | DBG_PRINT("X11: [CreateWindow]: top-level: %d/%d\n", x, y); 45 | NewtWindows_setPosSize(dpy, javaWindow, x, y, width, height); 46 | 47 | - if( TST_FLAG_IS_ALWAYSONTOP(flags) ) { 48 | + /*if( TST_FLAG_IS_ALWAYSONTOP(flags) ) { 49 | NewtWindows_setStackingEWMHFlags(dpy, root, javaWindow, _MASK_NET_WM_STATE_ABOVE, True); 50 | } else if( TST_FLAG_IS_ALWAYSONBOTTOM(flags) ) { 51 | NewtWindows_setStackingEWMHFlags(dpy, root, javaWindow, _MASK_NET_WM_STATE_BELOW, True); 52 | @@ -950,7 +960,13 @@ 53 | } 54 | if( !TST_FLAG_IS_RESIZABLE(flags) ) { 55 | NewtWindows_setMinMaxSize(dpy, javaWindow, width, height, width, height); 56 | - } 57 | + }*/ 58 | + 59 | + XserverRegion region = XFixesCreateRegion (dpy, NULL, 0); 60 | + XFixesSetWindowShapeRegion (dpy, window, ShapeBounding, 0, 0, 0); 61 | + XFixesSetWindowShapeRegion (dpy, window, ShapeInput, 0, 0, region); 62 | + XFixesDestroyRegion (dpy, region); 63 | + 64 | } 65 | XFlush(dpy); 66 | handles[0] = (jlong)(intptr_t)window; 67 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/Client.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import java.io.File; 4 | import java.io.FileReader; 5 | 6 | import javax.script.Invocable; 7 | import javax.script.ScriptEngine; 8 | import javax.script.ScriptEngineManager; 9 | 10 | import com.google.gson.Gson; 11 | import com.google.gson.GsonBuilder; 12 | import com.google.gson.JsonParser; 13 | 14 | import me.lixko.csgoexternals.util.StringFormat; 15 | 16 | public class Client { 17 | public boolean isInitialized = false; 18 | public boolean isRunning = false; 19 | public ModuleManager moduleManager; 20 | public EventHandler eventHandler; 21 | public static final Client theClient = new Client(); 22 | public StringFormat stringFormat; 23 | public CommandManager commandManager; 24 | public ConfigManager configManager; 25 | public KeyboardHandler keyboardHandler; 26 | 27 | public Gson gson; 28 | public Gson nicegson; 29 | public JsonParser jsonParser; 30 | public ScriptEngine jsengine; 31 | public Invocable jsinvocable; 32 | public boolean jsinitialized; 33 | 34 | public Client startClient() { 35 | this.moduleManager = new ModuleManager(); 36 | this.eventHandler = new EventHandler(); 37 | this.stringFormat = new StringFormat(); 38 | this.commandManager = new CommandManager(); 39 | this.configManager = new ConfigManager(); 40 | this.keyboardHandler = new KeyboardHandler(); 41 | 42 | this.nicegson = new GsonBuilder().setPrettyPrinting().create(); 43 | this.gson = new Gson(); 44 | 45 | this.isInitialized = true; 46 | this.isRunning = true; 47 | return this; 48 | } 49 | 50 | public void restartClient() { 51 | this.nicegson = null; 52 | this.gson = null; 53 | this.stringFormat = null; 54 | this.configManager = null; 55 | this.moduleManager = null; 56 | this.eventHandler = null; 57 | this.commandManager = null; 58 | this.jsengine = null; 59 | this.jsinvocable = null; 60 | this.keyboardHandler = null; 61 | startClient(); 62 | } 63 | 64 | public void startJS() { 65 | this.jsengine = new ScriptEngineManager().getEngineByName("nashorn"); 66 | this.jsinvocable = (Invocable) Client.theClient.jsengine; 67 | this.jsengine.put("Client", this); 68 | this.jsengine.put("console", this.stringFormat); 69 | this.jsinitialized = false; 70 | try { 71 | this.jsengine.eval(new FileReader(new File(ConfigManager.formatPath("mainjs/main.js")))); 72 | // this.jsengine.eval(new FileReader(new 73 | // File(this.configManager.formatPath("mainjs/eventhandler.js")))); 74 | // this.jsengine.eval(new FileReader(new 75 | // File(this.configManager.formatPath("mainjs/moduledef.js")))); 76 | for (File file : (new File(ConfigManager.formatPath("mods"))).listFiles()) 77 | if (!file.isDirectory()) 78 | this.jsengine.eval(new FileReader(file)); 79 | // TODO: JavaScript engine support 80 | this.jsinitialized = false; 81 | } catch (Exception e) { 82 | e.printStackTrace(); 83 | } 84 | } 85 | 86 | public void restartJS() { 87 | this.jsengine = null; 88 | this.jsinvocable = null; 89 | startJS(); 90 | } 91 | 92 | public void shutdownClient() { 93 | Client.theClient.eventHandler.onClientShutdown(); 94 | this.isRunning = false; 95 | } 96 | 97 | } 98 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/ConfigManager.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import java.io.File; 4 | import java.lang.reflect.Type; 5 | import java.util.HashMap; 6 | 7 | import com.google.gson.Gson; 8 | import com.google.gson.reflect.TypeToken; 9 | 10 | import me.lixko.csgoexternals.util.FileUtil; 11 | 12 | public class ConfigManager extends FileUtil { 13 | public static String folderName = "lixkopack"; 14 | public String configpath; 15 | public String packpath = FileUtil.formatPath(); 16 | 17 | public HashMap config = new HashMap(); 18 | 19 | ConfigManager() { 20 | configpath = FileUtil.formatPath("config.txt"); 21 | 22 | /* 23 | * GraphicsEnvironment ge = 24 | * GraphicsEnvironment.getLocalGraphicsEnvironment(); try { Font r = 25 | * Font.createFont(Font.TRUETYPE_FONT, new 26 | * File(FileUtil.formatPath("LiberationMono-Regular.ttf"))); Font b = 27 | * Font.createFont(Font.TRUETYPE_FONT, new 28 | * File(FileUtil.formatPath("LiberationMono-Bold.ttf"))); Font bi = 29 | * Font.createFont(Font.TRUETYPE_FONT, new 30 | * File(FileUtil.formatPath("LiberationMono-BoldItalic.ttf"))); Font i = 31 | * Font.createFont(Font.TRUETYPE_FONT, new 32 | * File(FileUtil.formatPath("LiberationMono-Italic.ttf"))); 33 | * ge.registerFont(r); ge.registerFont(b); ge.registerFont(bi); 34 | * ge.registerFont(i); 35 | * 36 | * DrawUtils.textRenderer = new 37 | * TextRenderer(b.deriveFont(Font.TRUETYPE_FONT, 16)); } catch 38 | * (FontFormatException | IOException e) { e.printStackTrace(); } 39 | */ 40 | 41 | // configfile = readFile(configpath); 42 | if (!isConfigured()) { 43 | System.out.println("[LixkoPack] Config not found! Creating one..."); 44 | createDefaults(); 45 | FileUtil.writeConfig(config, configpath); 46 | } else { 47 | updateConfig(); 48 | } 49 | } 50 | 51 | public void setValue(String path, String value) { 52 | config.put(path, value); 53 | System.out.println("Setting " + path + " to " + value + "!"); 54 | FileUtil.writeConfig(config, configpath); 55 | } 56 | 57 | public String getValue(String path) { 58 | updateConfig(); 59 | return config.get(path); 60 | } 61 | 62 | public void delValue(String path) { 63 | config.remove(path); 64 | FileUtil.writeConfig(config, configpath); 65 | } 66 | 67 | public void updateConfig() { 68 | String configjson = FileUtil.readFile(configpath); 69 | Gson gson = new Gson(); 70 | Type stringStringMap = new TypeToken>() { 71 | }.getType(); 72 | // HashMap featuresFromJson = 73 | // gson.fromJson(JSONFeatureSet, new TypeToken>() 74 | // {}.getType()); 75 | HashMap map = gson.fromJson(configjson, stringStringMap); 76 | if (map == null) 77 | config = new HashMap(); 78 | else 79 | config = map; 80 | } 81 | 82 | public void registerKeybind(int key, String action) { 83 | setValue("keybinds.key." + key, action); 84 | } 85 | 86 | public void unregisterKeybind(int key) { 87 | delValue("keybinds.key." + key); 88 | } 89 | 90 | public void registerAlias(String key, String cmd) { 91 | setValue("aliases." + key, cmd); 92 | } 93 | 94 | public void unregisterAlias(String key) { 95 | delValue("aliases." + key); 96 | } 97 | 98 | public String getBoundCommand(int key) { 99 | if (pathExists("keybinds.key." + key)) { 100 | return getValue("keybinds.key." + key); 101 | } else { 102 | return ""; 103 | } 104 | } 105 | 106 | public String getAliasCommand(String key) { 107 | if (pathExists("aliases." + key)) { 108 | return getValue("aliases." + key); 109 | } else { 110 | return ""; 111 | } 112 | } 113 | 114 | public void executeCommandOnKey(int key) { 115 | String s = getBoundCommand(key); 116 | 117 | if (s == "") 118 | return; 119 | if (s.startsWith("+")) { 120 | Client.theClient.commandManager.processPlusCommand(s); 121 | } else { 122 | Client.theClient.commandManager.processCommand(s); 123 | } 124 | } 125 | 126 | public void executeCommandOnKeyRelease(int key) { 127 | String s = getBoundCommand(key); 128 | if (s == "") 129 | return; 130 | if (s.startsWith("+")) { 131 | Client.theClient.commandManager.processPlusCommand("-" + s.substring(1)); 132 | } 133 | } 134 | 135 | public void createDefaults() { 136 | new File(formatPath("")).mkdirs(); 137 | new File(formatPath("scripts")).mkdirs(); 138 | new File(formatPath("mods")).mkdirs(); 139 | } 140 | 141 | public boolean isConfigured() { 142 | File f = new File(configpath); 143 | 144 | if (f.exists() && !f.isDirectory()) { 145 | return true; 146 | } 147 | 148 | return false; 149 | } 150 | 151 | public boolean pathExists(String key) { 152 | if (config == null) 153 | updateConfig(); 154 | return config.containsKey(key); 155 | } 156 | 157 | public void reload() { 158 | if (!isConfigured()) { 159 | createDefaults(); 160 | FileUtil.writeConfig(config, configpath); 161 | } else { 162 | updateConfig(); 163 | } 164 | } 165 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/JOGL2Renderer.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import java.awt.DisplayMode; 4 | 5 | import com.jogamp.opengl.GL2; 6 | import com.jogamp.opengl.GLAutoDrawable; 7 | import com.jogamp.opengl.GLEventListener; 8 | import com.jogamp.opengl.glu.GLU; 9 | 10 | import me.lixko.csgoexternals.offsets.Offsets; 11 | import me.lixko.csgoexternals.util.DrawUtils; 12 | import me.lixko.csgoexternals.util.ProfilerUtil; 13 | 14 | public class JOGL2Renderer implements GLEventListener { 15 | 16 | public static DisplayMode dm, dm_old; 17 | private GLU glu = new GLU(); 18 | 19 | private boolean needsDataUpdate = false; 20 | 21 | Thread updateLoop = new Thread(new Runnable() { 22 | @Override 23 | public void run() { 24 | while (!Client.theClient.isRunning) { 25 | try { 26 | Thread.sleep(100); 27 | } catch (InterruptedException e) { 28 | e.printStackTrace(); 29 | } 30 | } 31 | while (Client.theClient.isRunning) { 32 | try { 33 | Thread.sleep(2); 34 | if (!needsDataUpdate || Offsets.m_dwLocalPlayer == 0) 35 | continue; 36 | 37 | DrawUtils.lppos.updateData(); 38 | 39 | needsDataUpdate = false; 40 | } catch (Exception e) { 41 | e.printStackTrace(); 42 | return; 43 | } 44 | } 45 | } 46 | }); 47 | 48 | @Override 49 | public void display(GLAutoDrawable drawable) { 50 | if (!Client.theClient.isRunning) 51 | return; 52 | 53 | final GL2 gl = drawable.getGL().getGL2(); 54 | /*if(Engine.isInGame != 6) { 55 | try { 56 | Thread.sleep(1000); 57 | } catch (InterruptedException e) {} 58 | gl.glClearColor(0f, 0f, 0f, 0f); 59 | gl.glFlush(); 60 | return; 61 | }*/ 62 | 63 | ProfilerUtil.start(); 64 | init2D(drawable, gl); 65 | Client.theClient.eventHandler.onUIRender(); 66 | gl.glFlush(); 67 | 68 | //ProfilerUtil.measure("2D render"); 69 | init3D(drawable, gl); 70 | Client.theClient.eventHandler.onWorldRender(); 71 | gl.glFlush(); 72 | 73 | //ProfilerUtil.measure("3D render"); 74 | this.needsDataUpdate = true; 75 | } 76 | 77 | @Override 78 | public void dispose(GLAutoDrawable drawable) { 79 | // TODO Auto-generated method stub 80 | } 81 | 82 | @Override 83 | public void init(GLAutoDrawable drawable) { 84 | DrawUtils.gl = drawable.getGL().getGL2(); 85 | DrawUtils.glu = new GLU(); 86 | DrawUtils.drawable = drawable; 87 | DrawUtils.initializeTextures(); 88 | this.needsDataUpdate = true; 89 | updateLoop.start(); 90 | } 91 | 92 | private void init3D(GLAutoDrawable drawable, GL2 gl) { 93 | gl.glMatrixMode(GL2.GL_PROJECTION); 94 | gl.glLoadIdentity(); 95 | // TODO: Better FOV calculations - viewmatrix? 96 | int fov = DrawUtils.lppos.getFOV(); 97 | glu.gluPerspective(fov == 0 ? 74f : (fov * (0.74 + fov / 1125f)), (float) drawable.getSurfaceWidth() / (float) drawable.getSurfaceHeight(), 0.2, 8000.0); 98 | 99 | gl.glMatrixMode(GL2.GL_MODELVIEW); 100 | gl.glRotatef(DrawUtils.lppos.getPitch(), 1.0f, 0.0f, 0.0f); 101 | gl.glRotatef(DrawUtils.lppos.getYaw(), 0.0f, 1.0f, 0.0f); 102 | gl.glTranslatef(-DrawUtils.lppos.getViewOrigin()[0], -DrawUtils.lppos.getViewOrigin()[2], DrawUtils.lppos.getViewOrigin()[1]); 103 | 104 | gl.glShadeModel(GL2.GL_SMOOTH); 105 | gl.glClearColor(0f, 0f, 0f, 0f); 106 | gl.glClearDepth(1.0f); 107 | gl.glEnable(GL2.GL_DEPTH_TEST); 108 | // gl.glDepthFunc(GL2.GL_LEQUAL); 109 | // gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST); 110 | gl.glEnable(GL2.GL_BLEND); 111 | gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); 112 | 113 | } 114 | 115 | private void init2D(GLAutoDrawable drawable, GL2 gl) { 116 | gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 117 | 118 | gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); 119 | gl.glEnable(GL2.GL_BLEND); 120 | gl.glDisable(GL2.GL_CULL_FACE); 121 | gl.glDisable(GL2.GL_DEPTH_TEST); 122 | gl.glDisable(GL2.GL_TEXTURE_2D); 123 | gl.glDisable(GL2.GL_LIGHTING); 124 | 125 | gl.glMatrixMode(GL2.GL_PROJECTION); 126 | gl.glLoadIdentity(); 127 | gl.glOrtho(0, drawable.getSurfaceWidth(), 0, drawable.getSurfaceHeight(), -1, 1); // left,right,bottom,top,front,back 128 | 129 | gl.glMatrixMode(GL2.GL_MODELVIEW); 130 | gl.glLoadIdentity(); 131 | gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_FILL); 132 | } 133 | 134 | @Override 135 | public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { 136 | final GL2 gl = drawable.getGL().getGL2(); 137 | if (height <= 0) 138 | height = 1; 139 | final float h = (float) width / (float) height; 140 | gl.glViewport(0, 0, width, height); 141 | gl.glMatrixMode(GL2.GL_PROJECTION); 142 | gl.glLoadIdentity(); 143 | glu.gluPerspective(90.0f, h, 1.0, 8000.0); 144 | gl.glMatrixMode(GL2.GL_MODELVIEW); 145 | gl.glLoadIdentity(); 146 | } 147 | 148 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/KeyboardHandler.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import com.sun.jna.platform.unix.X11.KeySym; 4 | 5 | public class KeyboardHandler { 6 | 7 | byte[] keys = new byte[32]; 8 | byte[] lastkeys = new byte[32]; 9 | 10 | Thread keyLoop = new Thread(new Runnable() { 11 | @Override 12 | public void run() { 13 | 14 | while (!Client.theClient.isInitialized) { 15 | try { 16 | Thread.sleep(100); 17 | } catch (InterruptedException e) { 18 | e.printStackTrace(); 19 | } 20 | } 21 | while (Client.theClient.isRunning) { 22 | try { 23 | Thread.sleep(5); 24 | } catch (InterruptedException e) { 25 | e.printStackTrace(); 26 | } 27 | 28 | if (Engine.dpy == null) 29 | throw new Error("Can't open X Display"); 30 | 31 | Engine.x11.XQueryKeymap(Engine.dpy.get(), keys); 32 | 33 | for (int i = 0; i < keys.length; ++i) { 34 | if (keys[i] != lastkeys[i]) { 35 | for (int j = 0, test = 1; j < 8; ++j, test *= 2) { 36 | if (((keys[i] & test) != (lastkeys[i] & test))) { // (keys[i] & test) > 0) 37 | int code = i * 8 + j; 38 | KeySym sym = Engine.x11.XKeycodeToKeysym(Engine.dpy.get(), (byte) code, 0); 39 | // System.out.println((keys[i] & test) + " Key: " + Engine.x11.XKeysymToString(sym) + " / " + StringFormat.hex(code) + " = " + code + " / " + sym.intValue() + ", i: " + i + " j: " + j); 40 | if ((keys[i] & test) > 0) 41 | Client.theClient.eventHandler.onKeyPress(sym); 42 | else 43 | Client.theClient.eventHandler.onKeyRelease(sym); 44 | } 45 | } 46 | } 47 | lastkeys[i] = keys[i]; 48 | } 49 | } 50 | System.out.println("ENDING KEYLOOP"); 51 | Engine.x11.XCloseDisplay(Engine.dpy.get()); 52 | } 53 | }); 54 | 55 | public KeyboardHandler() { 56 | keyLoop.start(); 57 | } 58 | 59 | public boolean isPressed(int code) { 60 | int c = Engine.x11.XKeysymToKeycode(Engine.dpy.get(), new KeySym(code)); 61 | return (keys[(c & 0xFF) / 8] & (1 << (c % 8))) > 0; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/Main.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.Locale; 6 | 7 | import me.lixko.csgoexternals.util.DrawUtils; 8 | import me.lixko.csgoexternals.util.demo.DemoParser; 9 | 10 | public final class Main { 11 | 12 | // http://stackoverflow.com/questions/2580279/how-do-i-run-my-application-as-superuser-from-eclipse 13 | public static void main(String... args) { 14 | Locale.setDefault(new Locale("en", "US")); 15 | try { 16 | boolean demop = false; 17 | for (String arg : args) { 18 | if (arg.equalsIgnoreCase("-nooverlay") || arg.equalsIgnoreCase("-disableoverlay")) 19 | DrawUtils.enableOverlay = false; 20 | if (arg.equalsIgnoreCase("-demop")) 21 | demop = true; 22 | } 23 | //DrawUtils.enableOverlay = false; 24 | if (!DrawUtils.enableOverlay) 25 | System.out.println("Disabling overlay!"); 26 | 27 | if(demop) { 28 | //DemoParser demp = new DemoParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/7_1_1946.dem")); 29 | //DemoParser demp = new DemoParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/jb.dem")); 30 | //DemoParser demp = new DemoParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/jb07-03-2018_00-05_bug.dem")); 31 | //DemoParser demp = new DemoParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/jb11-03-2018_03-00.dem")); 32 | DemoParser demp = new DemoParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/gg22-07-2018_20-41_2.dem")); 33 | demp.parse(); 34 | System.exit(0); 35 | } 36 | 37 | Engine engine = new Engine(); 38 | engine.init(args); 39 | } catch (InterruptedException | IOException e) { 40 | e.printStackTrace(); 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/ModuleManager.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.TreeMap; 6 | 7 | import me.lixko.csgoexternals.modules.*; 8 | import me.lixko.csgoexternals.modules.Module; 9 | import me.lixko.csgoexternals.util.DrawUtils; 10 | 11 | public class ModuleManager { 12 | 13 | public ArrayList activeModules = new ArrayList(); 14 | public HashMap toggledModules = new HashMap(); 15 | public TreeMap cachedStatusText = new TreeMap(); 16 | 17 | public ModuleManager() { 18 | registerModules(); 19 | } 20 | 21 | public void registerModules() { 22 | //registerModule(new AimBot()); 23 | //registerModule(new AimBotGhetto()); 24 | registerModule(new AutoDefuse()); 25 | // registerModule(new AutoPlant()); 26 | registerModule(new Bunnyhop()); 27 | registerModule(new DisablePP()); 28 | //registerModule(new DownloadFixer()); 29 | registerModule(new FOVChanger()); 30 | registerModule(new Glow()); 31 | registerModule(new NoFlash()); 32 | registerModule(new NoHands()); 33 | registerModule(new RCS()); 34 | registerModule(new SkinChanger()); 35 | registerModule(new TestModule()); 36 | 37 | // TODO: Fix dependencies and NullPtrEx with DrawUtils.getScreenWidth() 38 | if (DrawUtils.enableOverlay) { 39 | registerModule(new VisibleTest()); 40 | //registerModule(new AutoJoinCT()); 41 | registerModule(new BoneESP()); 42 | registerModule(new CrosshairDot()); 43 | //registerModule(new MapRender()); 44 | registerModule(new NameHUD()); 45 | registerModule(new RankReveal()); 46 | registerModule(new RecoilCross()); 47 | registerModule(new Spectators()); 48 | } 49 | } 50 | 51 | public void reloadManager() { 52 | this.activeModules.clear(); 53 | registerModules(); 54 | System.out.println("[LixkoPack] ModuleManager reloaded!"); 55 | } 56 | 57 | public void registerModule(Module module) { 58 | this.activeModules.add(module); 59 | module.onRegister(); 60 | } 61 | 62 | public boolean isLoaded(String moduleName) { 63 | for (Module eventModule : Client.theClient.moduleManager.activeModules) { 64 | if (eventModule.getName().equals(moduleName)) { 65 | return true; 66 | } 67 | } 68 | return false; 69 | } 70 | 71 | public int getKeybind(String moduleName) { 72 | for (Module eventModule : Client.theClient.moduleManager.activeModules) { 73 | if (eventModule.getName().equals(moduleName)) { 74 | return eventModule.getBind(); 75 | } 76 | } 77 | 78 | return 0; 79 | } 80 | 81 | public boolean isToggled(String moduleName) { 82 | return (toggledModules.containsKey(moduleName) ? toggledModules.get(moduleName) : false); 83 | } 84 | 85 | public void setToggle(String moduleName, Boolean toggled) { 86 | this.toggledModules.put(moduleName, toggled); 87 | } 88 | 89 | public Module getModuleByKeybind(int key) { 90 | for (Module eventModule : Client.theClient.moduleManager.activeModules) { 91 | if (eventModule.getBind() == key) { 92 | return eventModule; 93 | } 94 | } 95 | 96 | return null; 97 | } 98 | 99 | public Module getModule(String moduleName) { 100 | for (Module eventModule : Client.theClient.moduleManager.activeModules) { 101 | if (eventModule.getName().equals(moduleName)) { 102 | return eventModule; 103 | } 104 | } 105 | 106 | return null; 107 | } 108 | 109 | public Module getModule(int moduleID) { 110 | if (moduleID > Client.theClient.moduleManager.activeModules.size()) 111 | return null; 112 | else 113 | return Client.theClient.moduleManager.activeModules.get(moduleID); 114 | } 115 | 116 | public int moduleSize() { 117 | return Client.theClient.moduleManager.activeModules.size(); 118 | } 119 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/elf/GameInterface.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.elf; 2 | 3 | import java.util.ArrayList; 4 | import com.github.jonatino.process.Module; 5 | import com.sun.jna.Pointer; 6 | 7 | public class GameInterface { 8 | 9 | private Module module; 10 | private String ifname; 11 | private long ifregbase = 0; 12 | private long instantiateIfFn = 0; 13 | private long vftptr = 0; 14 | private long vftbase = 0; 15 | ArrayList funcs = new ArrayList<>(); 16 | 17 | // https://github.com/ericek111/java-csgo-internals/blob/master/src/eu/lixko/csgoshared/offsets/GameInterface.java 18 | 19 | public GameInterface(Module module, long baseclass) { 20 | this.module = module; 21 | this.ifregbase = baseclass; 22 | this.init(); 23 | } 24 | 25 | public void init() { 26 | long strptr = module.readLong(this.ifregbase + 8); 27 | this.ifname = module.readString(strptr, 256); 28 | this.instantiateIfFn = module.readLong(this.ifregbase); 29 | 30 | if (module.readByte(this.instantiateIfFn) != 0x48) { 31 | this.vftptr = this.instantiateIfFn + module.readInt(this.instantiateIfFn + 1 + 3) + 8; 32 | } else { 33 | this.vftptr = module.readLong(this.instantiateIfFn + module.readInt(this.instantiateIfFn + 3) + 7); 34 | //System.out.println(this.vftptr - module.GetAbsoluteAddress(this.instantiateIfFn, 3 ,7)); 35 | } 36 | //this.vftptr = module.GetAbsoluteAddress(this.instantiateIfFn + (module.readByte(this.instantiateIfFn) != 0x48 ? 1 : 0), 3, 7); 37 | this.vftbase = module.readLong(this.vftptr); 38 | 39 | for (int i = 0;; i++) { 40 | long fptr = module.readLong(vftbase + Pointer.SIZE * i); 41 | if (fptr == 0) 42 | break; 43 | funcs.add(fptr); 44 | } 45 | //System.out.println("Found " + funcs.size() + " fcs in " + this.ifname); 46 | } 47 | 48 | public String getName() { 49 | return this.ifname; 50 | } 51 | 52 | public Module getModule() { 53 | return this.module; 54 | } 55 | 56 | public long getInstantiateFn() { 57 | return this.instantiateIfFn; 58 | } 59 | 60 | public long getFunction(int index) { 61 | return this.funcs.get(index); 62 | } 63 | 64 | public ArrayList getFunctions() { 65 | return this.funcs; 66 | } 67 | 68 | public long getVFTPointer() { 69 | return this.vftptr; 70 | } 71 | 72 | public long getVFTBase() { 73 | return this.vftbase; 74 | } 75 | 76 | public long getIfRegBase() { 77 | return this.ifregbase; 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/AutoJoinCT.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.sun.jna.NativeLong; 4 | import com.sun.jna.platform.unix.X11.KeySym; 5 | 6 | import me.lixko.csgoexternals.Client; 7 | import me.lixko.csgoexternals.Engine; 8 | import me.lixko.csgoexternals.offsets.Netvars; 9 | import me.lixko.csgoexternals.offsets.Offsets; 10 | import me.lixko.csgoexternals.structs.CSPlayerResource; 11 | import me.lixko.csgoexternals.util.ChatColor; 12 | import me.lixko.csgoexternals.util.DrawUtils; 13 | import me.lixko.csgoexternals.util.MemoryUtils; 14 | import me.lixko.csgoexternals.util.TextAlign; 15 | import me.lixko.csgoexternals.util.XKeySym; 16 | 17 | public class AutoJoinCT extends Module { 18 | 19 | RankReveal rankreveal; 20 | Module thismod = this; 21 | CSPlayerResource pres = new CSPlayerResource(); 22 | int loopc = 0; 23 | 24 | Thread autoJoin = new Thread(new Runnable() { 25 | @Override 26 | public void run() { 27 | int keycode = Engine.x11.XKeysymToKeycode(Engine.dpy.get(), new KeySym(XKeySym.XK_KP_9)); 28 | 29 | while (Client.theClient.isRunning) { 30 | try { 31 | Thread.sleep(5); 32 | if (Offsets.m_dwLocalPlayer == 0 || !thismod.isToggled()) 33 | continue; 34 | int myteam = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + Netvars.CBaseEntity.m_iTeamNum); 35 | if (myteam == 3) 36 | continue; 37 | 38 | //Engine.clientModule().read(Offsets.m_dwPlayerResources + pres.m_iTeam.offset(), Integer.SIZE * 64, buf); 39 | 40 | int tCount = 0, ctCount = 0; 41 | 42 | for(int i = 1; i < 64; i++) { 43 | long entityptr = MemoryUtils.getEntity(i); 44 | if(entityptr == 0 || Offsets.m_dwLocalPlayer == entityptr) continue; 45 | 46 | int t = Engine.clientModule().readInt(entityptr + Netvars.CBaseEntity.m_iTeamNum); 47 | if(t == 2) { 48 | tCount++; 49 | } else if(t == 3) { 50 | ctCount++; 51 | } 52 | } 53 | 54 | boolean canJoinCT = false; 55 | 56 | if (ctCount < 2) 57 | canJoinCT = true; 58 | if (ctCount == 2 && tCount > 8) 59 | canJoinCT = true; 60 | if (ctCount == 3 && tCount > 11) 61 | canJoinCT = true; 62 | if (ctCount == 4 && tCount > 14) 63 | canJoinCT = true; 64 | if (ctCount == 5 && tCount > 17) 65 | canJoinCT = true; 66 | 67 | //System.out.println(tCount + " / " + ctCount); 68 | 69 | if(!canJoinCT) continue; 70 | 71 | Engine.x11.XFlush(Engine.dpy.get()); 72 | Engine.xtest.XTestFakeKeyEvent(Engine.dpy.get(), keycode, true, new NativeLong(0)); 73 | Thread.sleep(10); 74 | Engine.xtest.XTestFakeKeyEvent(Engine.dpy.get(), keycode, false, new NativeLong(0)); 75 | } catch (Exception e) { 76 | e.printStackTrace(); 77 | } 78 | } 79 | } 80 | }); 81 | 82 | @Override 83 | public void onEngineLoaded() { 84 | rankreveal = (RankReveal) Client.theClient.moduleManager.getModule("RankReveal"); 85 | autoJoin.start(); 86 | } 87 | 88 | @Override 89 | public void onUIRender() { 90 | if (!this.isToggled() || Offsets.m_dwLocalPlayer == 0 || rankreveal == null) 91 | return; 92 | loopc++; 93 | if (loopc == 90) { 94 | loopc = 0; 95 | } 96 | 97 | if (rankreveal.canJoinCT) { 98 | DrawUtils.setStyle(ChatColor.LARGE); 99 | DrawUtils.setTextColor(0.54f, 0.9f, 1.0f); 100 | DrawUtils.setAlign(TextAlign.CENTER); 101 | DrawUtils.drawString(DrawUtils.getScreenWidth() / 2, DrawUtils.getScreenHeight() - 70, ">>> JOIN CT <<<"); 102 | } 103 | if (this.isToggled()) { 104 | DrawUtils.setLineWidth(3f); 105 | DrawUtils.setColor(0.54f, 0.72f, 1.0f, (float) Math.sin((loopc / 90f) * Math.PI)); 106 | DrawUtils.drawRectangle(DrawUtils.getScreenWidth() / 2 - 83, DrawUtils.getScreenHeight(), DrawUtils.getScreenWidth() / 2 - 35, DrawUtils.getScreenHeight() - 50); 107 | } 108 | } 109 | 110 | @Override 111 | public void onEnable() { 112 | loopc = 0; 113 | } 114 | 115 | } 116 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/BoneESP.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.sdk.Studio; 10 | import me.lixko.csgoexternals.structs.Mstudiobone_t; 11 | import me.lixko.csgoexternals.util.DrawUtils; 12 | import me.lixko.csgoexternals.util.MemoryUtils; 13 | 14 | public class BoneESP extends Module { 15 | 16 | boolean needsDataUpdate = false; 17 | Module thismodule = this; 18 | Mstudiobone_t studiobone = new Mstudiobone_t(); 19 | MemoryBuffer studiobonebuf = new MemoryBuffer(studiobone.size()); 20 | float[][][][][] bonesBuf = new float[2][64][Studio.MAXSTUDIOBONES][2][3]; 21 | float[][] colorBuf = new float[64][4]; 22 | int bonesBufMutex = 0; 23 | 24 | Thread updateLoop = new Thread(new Runnable() { 25 | @Override 26 | public void run() { 27 | while (Client.theClient.isRunning) { 28 | try { 29 | Thread.sleep(5); 30 | if (!thismodule.isToggled() || Offsets.m_dwLocalPlayer == 0) 31 | continue; 32 | 33 | updateArray(); 34 | 35 | } catch (Exception e) { 36 | e.printStackTrace(); 37 | try { 38 | Thread.sleep(500); 39 | } catch (InterruptedException e1) { 40 | e1.printStackTrace(); 41 | } 42 | } 43 | } 44 | } 45 | }); 46 | 47 | @Override 48 | public void onEngineLoaded() { 49 | studiobone.setSource(studiobonebuf); 50 | updateLoop.start(); 51 | } 52 | 53 | @Override 54 | public void onWorldRender() { 55 | if (!Client.theClient.isRunning || !thismodule.isToggled()) 56 | return; 57 | 58 | DrawUtils.setColor(0x00FFFFFF); 59 | int i = 0; 60 | for (float[][][] entBones : bonesBuf[bonesBufMutex]) { 61 | for (float[][] bone : entBones) { 62 | if (bone[1][0] == 0f || bone[1][1] == 0f || bone[1][2] == 0f || bone[0][0] == 0f || bone[0][1] == 0f || bone[0][2] == 0f) 63 | continue; 64 | DrawUtils.setColor(colorBuf[i]); 65 | DrawUtils.drawLine(bone[0], bone[1]); 66 | } 67 | i++; 68 | } 69 | } 70 | 71 | public void updateArray() { 72 | int procMutex = (bonesBufMutex + 1) % bonesBuf.length; 73 | bonesBuf[procMutex] = new float[64][Studio.MAXSTUDIOBONES][2][3]; 74 | for (int i = 1; i < 64; i++) { 75 | long entityptr = MemoryUtils.getEntity(i); 76 | if (entityptr == 0) 77 | continue; 78 | if (entityptr == Offsets.m_dwLocalPlayer) 79 | continue; 80 | 81 | boolean isDormant = Engine.clientModule().readBoolean(entityptr + Offsets.m_bDormant); 82 | if (isDormant) 83 | continue; 84 | 85 | int health = Engine.clientModule().readInt(entityptr + Netvars.CBasePlayer.m_iHealth); 86 | if (health < 1) 87 | continue; 88 | 89 | if (health < 3 && health > 0) { 90 | colorBuf[i] = new float[] { 0f, 1f, 0f, 1f }; 91 | } else { 92 | int team = Engine.clientModule().readInt(entityptr + Netvars.CBaseEntity.m_iTeamNum); 93 | if (team == 2) { 94 | colorBuf[i] = new float[] { 1f, health != 0 ? 1.0f - health / 100.0f : 0.0f, 0f, 1f }; 95 | } else if (team == 3) { 96 | colorBuf[i] = new float[] { 0f, health != 0 ? 1.0f - health / 100.0f : 0.0f, 1f, 1f }; 97 | } 98 | } 99 | 100 | // C_LocalTempEntity::DrawStudioModel(int) 101 | long studioModelptr = Engine.engineModule().readLong(entityptr + Offsets.m_offsetModelInfo); 102 | if (studioModelptr == 0) 103 | continue; 104 | 105 | long studioModel = Engine.engineModule().readLong(studioModelptr); 106 | // 0x9C = offsetof(studiohdr_t, numbones) > numBones, boneIndex 107 | int[] studioHdrData = Engine.engineModule().read(studioModel + 0x9C, 2 * Integer.BYTES).getIntArray(0, 2); 108 | 109 | for (int bi = 0; bi < studioHdrData[0]; bi++) { 110 | bonesBuf[procMutex][i][bi][0] = AimBotGhetto.GetBonePosition(entityptr, bi); 111 | int parentBone = Engine.engineModule().readInt(studioModel + studioHdrData[1] + bi * studiobone.size() + 4); 112 | int flags = Engine.engineModule().readInt(studioModel + studioHdrData[1] + bi * studiobone.size() + 0xA0); 113 | 114 | if (parentBone == -1 || (flags & Studio.BONE_USED_BY_HITBOX) == 0 || parentBone > Studio.MAXSTUDIOBONES) 115 | continue; 116 | bonesBuf[procMutex][i][bi][1] = AimBotGhetto.GetBonePosition(entityptr, parentBone); 117 | } 118 | } 119 | bonesBufMutex = procMutex; 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/Bunnyhop.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Client; 4 | import me.lixko.csgoexternals.Engine; 5 | import me.lixko.csgoexternals.offsets.Netvars; 6 | import me.lixko.csgoexternals.offsets.Offsets; 7 | import me.lixko.csgoexternals.sdk.Const; 8 | 9 | public class Bunnyhop extends Module { 10 | 11 | Module thismodule = this; 12 | 13 | Thread bhopLoop = new Thread(new Runnable() { 14 | @Override 15 | public void run() { 16 | while (Client.theClient.isRunning) { 17 | try { 18 | Thread.sleep(5); 19 | if (Offsets.m_dwLocalPlayer == 0 || !thismodule.isToggled()) 20 | continue; 21 | 22 | if (Engine.clientModule().readInt(Offsets.input.alt1) == 5) { 23 | long m_fFlags = Engine.clientModule().readLong(Offsets.m_dwLocalPlayer + Netvars.CBasePlayer.m_fFlags); 24 | // TODO: Add randomization settings. 25 | if (false && (m_fFlags & Const.FL_ONGROUND) > 0) 26 | Engine.clientModule().writeInt(Offsets.input.jump, 6); 27 | else if ((m_fFlags & Const.FL_ONGROUND) > 0) { 28 | Thread.sleep(5 + (int) (Math.random() * 15)); 29 | Engine.clientModule().writeInt(Offsets.input.jump, 5); 30 | Thread.sleep(15 + (int) (Math.random() * 100)); 31 | Engine.clientModule().writeInt(Offsets.input.jump, 4); 32 | } 33 | } 34 | } catch (Exception e) { 35 | e.printStackTrace(); 36 | return; 37 | } 38 | } 39 | } 40 | }); 41 | 42 | @Override 43 | public void onEngineLoaded() { 44 | bhopLoop.start(); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/CrosshairDot.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.offsets.Offsets; 4 | import me.lixko.csgoexternals.util.DrawUtils; 5 | 6 | public class CrosshairDot extends Module { 7 | 8 | private final int sx = (int) (DrawUtils.getScreenWidth() * 0.5f); 9 | private final int sy = (int) (DrawUtils.getScreenHeight() * 0.5f); 10 | 11 | @Override 12 | public void onUIRender() { 13 | if (Offsets.m_dwLocalPlayer == 0 || !this.isToggled()) 14 | return; 15 | DrawUtils.setColor(0, 0, 0, 150); 16 | DrawUtils.fillRectanglew(sx - 2, sy - 2, 4, 4); 17 | DrawUtils.setColor(0x00FFFFFF); 18 | DrawUtils.fillRectanglew(sx - 1, sy - 1, 2, 2); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/DisablePP.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Engine; 4 | import me.lixko.csgoexternals.offsets.Offsets; 5 | 6 | public class DisablePP extends Module { 7 | 8 | int loopwrite = 0; 9 | 10 | @Override 11 | public void onLoop() { 12 | if (!this.isToggled()) 13 | return; 14 | loopwrite++; 15 | if (loopwrite == 300) { 16 | loopwrite = 0; 17 | disablePP(true); 18 | } 19 | } 20 | 21 | @Override 22 | public void onEnable() { 23 | disablePP(true); 24 | } 25 | 26 | @Override 27 | public void onDisable() { 28 | disablePP(false); 29 | } 30 | 31 | private void disablePP(boolean state) { 32 | Engine.clientModule().writeBoolean(Offsets.m_dw_bOverridePostProcessingDisable, state); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/DownloadFixer.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | import java.net.HttpURLConnection; 7 | import java.net.URL; 8 | import java.nio.file.Files; 9 | import java.nio.file.Path; 10 | import java.nio.file.Paths; 11 | 12 | import me.lixko.csgoexternals.Engine; 13 | import me.lixko.csgoexternals.offsets.Offsets; 14 | import me.lixko.csgoexternals.offsets.PatternScanner; 15 | 16 | public class DownloadFixer extends Module { 17 | public long downloadManager; 18 | 19 | @Override 20 | public void onEngineLoaded() { 21 | long TheDownloadManagerMov = PatternScanner.getAddressForPattern(Engine.engineModule(), "55 48 8D 3D ?? ?? ?? ?? 48 89 E5 5D E9 BF FF FF FF") + 1; 22 | downloadManager = Engine.engineModule().GetAbsoluteAddress(TheDownloadManagerMov, 3, 7); 23 | //this.onPreLoop(); 24 | //System.exit(0); 25 | } 26 | 27 | @Override 28 | public void onPreLoop() { 29 | //System.out.println("lmao"); 30 | long m_activeRequest = Engine.engineModule().readLong(downloadManager + 4 * 8); 31 | if(m_activeRequest == 0) 32 | return; 33 | 34 | // https://github.com/VSES/SourceEngine2007/blob/master/se2007/engine/download.cpp#L865 35 | 36 | // m_lastPercent - 9 * 8 37 | // "Downloading %s%s.\n", 38 | // *(_QWORD *)(a1 + 32) + 20LL, - m_activeRequest->baseURL 39 | // *(_QWORD *)(a1 + 32) + 532LL); - m_activeRequest->gamePath 40 | 41 | // CUtlVector< RequestContext * > m_queuedRequests; 42 | long m_queuedRequests_List = Engine.engineModule().readLong(downloadManager); 43 | if(m_queuedRequests_List == 0) 44 | return; 45 | 46 | int m_queuedRequests_Count = Engine.engineModule().readInt(downloadManager + 2 * 8); 47 | System.out.println(m_queuedRequests_Count); 48 | for(int i = 0; i < m_queuedRequests_Count; i++) { 49 | m_activeRequest = Engine.engineModule().readLong(downloadManager + 4 * 8); 50 | // check if user hasn't disconnected 51 | if(m_activeRequest == 0) 52 | break; 53 | 54 | Engine.engineModule().writeInt(m_activeRequest + 8, 4); 55 | long curReq = Engine.engineModule().readLong(m_queuedRequests_List + i * 8); // m_queuedRequests[i] 56 | if(!Engine.engineModule().readBoolean(curReq + 3)) // bAsHTTP 57 | continue; 58 | 59 | String baseURL = Engine.engineModule().readString(curReq + 20, 256); 60 | String gamePath = Engine.engineModule().readString(curReq + 532, 256); 61 | 62 | System.out.println(baseURL + gamePath); 63 | 64 | try { 65 | final URL url = new URL(baseURL + gamePath); 66 | final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 67 | conn.setConnectTimeout(5000); 68 | conn.setRequestProperty("User-Agent", "Half-Life 2"); 69 | final int responseCode = conn.getResponseCode(); 70 | // Engine.engineModule().writeInt(curReq + 1300, conn.getContentLength()); // nBytesTotal 71 | if(responseCode != HttpURLConnection.HTTP_OK) { 72 | System.err.println("[" + responseCode + "] Failed to download: " + baseURL + gamePath); 73 | Engine.engineModule().writeInt(curReq + 8, 4); 74 | continue; 75 | } 76 | 77 | final InputStream in = url.openStream(); 78 | final Path path = Paths.get(Offsets.modDirectory + File.separator + gamePath); 79 | if(path.toFile().exists()) 80 | path.toFile().delete(); 81 | Files.createDirectories(path.getParent()); 82 | Files.copy(in, path); 83 | Engine.engineModule().writeInt(curReq + 8, 2); 84 | } catch (IOException e) { 85 | Engine.engineModule().writeInt(curReq + 8, 4); 86 | e.printStackTrace(); 87 | } 88 | 89 | } 90 | 91 | // https://github.com/VSES/SourceEngine2007/blob/43a5c90a5ada1e69ca044595383be67f40b33c61/src_main/engine/download_internal.h#L58 92 | // https://github.com/VSES/SourceEngine2007/blob/master/se2007/engine/download.cpp#L774 93 | //int status = Engine.engineModule().readInt(m_activeRequest + 8); // m_activeRequest->status, HTTP_FETCH=1, HTTP_DONE=2, HTTP_ERROR=4 94 | //long nBytesTotal = Engine.engineModule().readInt(m_activeRequest + 1300); // m_activeRequest->nBytesTotal 95 | //System.out.println(status + " / " + nBytesTotal); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/EyeTrace.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.sdk.Studio; 10 | import me.lixko.csgoexternals.structs.Mstudiobone_t; 11 | import me.lixko.csgoexternals.util.DrawUtils; 12 | import me.lixko.csgoexternals.util.MathUtils; 13 | import me.lixko.csgoexternals.util.MemoryUtils; 14 | import me.lixko.csgoexternals.util.StringFormat; 15 | 16 | public class EyeTrace extends Module { 17 | 18 | boolean needsDataUpdate = false; 19 | Module thismodule = this; 20 | 21 | float[][] lineStart = new float[64][3]; 22 | float[][] lineEnd = new float[64][3]; 23 | float[][] lineColor = new float[64][4]; 24 | boolean[] shouldRender = new boolean[64]; 25 | MemoryBuffer anglesBuf = new MemoryBuffer(Float.BYTES * 3); 26 | // int bonesBufMutex = 0; 27 | 28 | Thread updateLoop = new Thread(new Runnable() { 29 | @Override 30 | public void run() { 31 | while (Client.theClient.isRunning) { 32 | try { 33 | Thread.sleep(5); 34 | //if (!thismodule.isToggled() || Offsets.m_dwLocalPlayer == 0) 35 | // continue; 36 | 37 | updateArray(); 38 | 39 | } catch (Exception e) { 40 | e.printStackTrace(); 41 | try { 42 | Thread.sleep(500); 43 | } catch (InterruptedException e1) { 44 | e1.printStackTrace(); 45 | } 46 | } 47 | } 48 | } 49 | }); 50 | 51 | @Override 52 | public void onEngineLoaded() { 53 | updateLoop.start(); 54 | } 55 | 56 | @Override 57 | public void onWorldRender() { 58 | //if (!Client.theClient.isRunning || !thismodule.isToggled()) 59 | // return; 60 | 61 | for (int i = 1; i < lineStart.length; i++) { 62 | if (!shouldRender[i]) 63 | continue; 64 | 65 | float[] start = lineStart[i]; 66 | float[] end = lineEnd[i]; 67 | float[] color = lineColor[i]; 68 | DrawUtils.setColor(color); 69 | DrawUtils.drawLine(start, end); 70 | 71 | DrawUtils.draw3DString("HELOOOOO", 0, 0, 0, 0, 0, 1); 72 | 73 | 74 | } 75 | } 76 | 77 | public void updateArray() { 78 | for (int i = 1; i < 64; i++) { 79 | shouldRender[i] = false; 80 | 81 | long entityptr = MemoryUtils.getEntity(i); 82 | if (entityptr == 0) 83 | continue; 84 | if (entityptr == Offsets.m_dwLocalPlayer) 85 | continue; 86 | 87 | boolean isDormant = Engine.clientModule().readBoolean(entityptr + Offsets.m_bDormant); 88 | if (isDormant) 89 | continue; 90 | 91 | int health = Engine.clientModule().readInt(entityptr + Netvars.CBasePlayer.m_iHealth); 92 | if (health < 1) 93 | continue; 94 | 95 | int team = Engine.clientModule().readInt(entityptr + Netvars.CBaseEntity.m_iTeamNum); 96 | float[] colorS = {1.0f, 1.0f, 1.0f, 0.7f}; 97 | float[] colorT = {0.878f, 0.686f, 0.337f, 1f}; 98 | float[] colorCT = {0.54f, 0.72f, 1.0f, 1f}; 99 | 100 | if (team == 1) { 101 | this.lineColor[i] = colorS; 102 | } else if (team == 2) { 103 | this.lineColor[i] = colorT; 104 | } else if (team == 3) { 105 | this.lineColor[i] = colorCT; 106 | } 107 | 108 | Engine.clientModule().read(entityptr + Netvars.CBaseEntity.m_vecOrigin, anglesBuf); 109 | lineStart[i] = anglesBuf.getFloatArray(0, 3); 110 | Engine.clientModule().read(entityptr + + Netvars.CBasePlayer.localdata.m_vecViewOffset_0, anglesBuf); 111 | float[] off = anglesBuf.getFloatArray(0, 3); 112 | MathUtils.add(lineStart[i], off); 113 | Engine.clientModule().read(entityptr + Netvars.CCSPlayer.m_angEyeAngles, anglesBuf); 114 | float[] angles = anglesBuf.getFloatArray(0, 3); 115 | 116 | lineEnd[i] = MathUtils.crotateVector(lineStart[i], angles, 2000f); 117 | shouldRender[i] = true; 118 | } 119 | } 120 | 121 | } 122 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/FOVChanger.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Client; 4 | import me.lixko.csgoexternals.Engine; 5 | import me.lixko.csgoexternals.offsets.Netvars; 6 | import me.lixko.csgoexternals.offsets.Offsets; 7 | import me.lixko.csgoexternals.sdk.Const; 8 | import me.lixko.csgoexternals.util.MemoryUtils; 9 | 10 | public class FOVChanger extends Module { 11 | 12 | Thread fovLoop = new Thread(new Runnable() { 13 | @Override 14 | public void run() { 15 | while (Client.theClient.isRunning) { 16 | try { 17 | if (Offsets.m_dwLocalPlayer == 0) 18 | continue; 19 | } catch (Exception e) { 20 | e.printStackTrace(); 21 | return; 22 | } 23 | } 24 | } 25 | }); 26 | 27 | @Override 28 | public void onEngineLoaded() { 29 | // fovLoop.start(); 30 | } 31 | 32 | @Override 33 | public void onDisable() { 34 | long entityptr = MemoryUtils.getLocalOrSpectated(); 35 | if (entityptr == 0) 36 | return; 37 | 38 | int fov = Engine.clientModule().readInt(entityptr + Netvars.CBasePlayer.m_iDefaultFOV); 39 | Engine.clientModule().writeInt(entityptr + Netvars.CBasePlayer.m_iFOV, fov); 40 | } 41 | 42 | @Override 43 | public void onLoop() { 44 | if (!this.isToggled()) 45 | return; 46 | 47 | long entityptr = MemoryUtils.getLocalOrSpectated(); 48 | if (entityptr == 0) 49 | return; 50 | 51 | // Engine.clientModule().writeFloat(Offsets.m_dwLocalPlayer + 0x36f0 + 0x48, 0.000005f); 52 | Engine.clientModule().writeInt(entityptr + Netvars.CBasePlayer.m_iFOV, (int) 5); 53 | // Engine.clientModule().writeInt(entityptr + Netvars.CBasePlayer.m_iFOVStart, (int) 0); 54 | // Engine.clientModule().writeFloat(entityptr + Netvars.CBasePlayer.m_flFOVTime, 1.0f); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/FollowPath.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.structs.VectorMem; 10 | import me.lixko.csgoexternals.util.DrawUtils; 11 | import me.lixko.csgoexternals.util.GLGraph; 12 | import me.lixko.csgoexternals.util.GLTrace; 13 | import me.lixko.csgoexternals.util.MathUtils; 14 | import me.lixko.csgoexternals.util.MemoryUtils; 15 | import me.lixko.csgoexternals.util.StringFormat; 16 | import me.lixko.csgoexternals.util.TextAlign; 17 | import me.lixko.csgoexternals.util.XKeySym; 18 | 19 | public class FollowPath extends Module { 20 | 21 | MemoryBuffer originbuf = new MemoryBuffer(Float.BYTES * 3); 22 | VectorMem origin = new VectorMem(originbuf); 23 | GLTrace trace; 24 | boolean startDrawing = false; 25 | 26 | long trackingEntity = 0; 27 | int trackingEntityIdx = 0; 28 | String trackingName = null; 29 | float[] trackingOrigin = new float[3]; 30 | float trackingDistance = 0f; 31 | 32 | int width = 720, height = 360, startX = 1920 - 50 - width, startY = 450; 33 | GLGraph diffGraph; 34 | 35 | @Override 36 | public void onEngineLoaded() { 37 | diffGraph = new GLGraph(DrawUtils.gl, startX, startY, width, height, 1.0f, 400); 38 | diffGraph.setColor(0f, 1f, 1f, 1f); 39 | 40 | trace = new GLTrace(DrawUtils.gl, startX, startY, width, height, 400); 41 | //trace.setAutoscale(true); 42 | trace.setLineWidth(2.0f); 43 | trace.setScaleX(1f); 44 | trace.setScaleY(1f); 45 | trace.setColor(1f, 0f, 0f, 1f); 46 | } 47 | 48 | @Override 49 | public void onUIRender() { 50 | if(!Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R)) 51 | return; 52 | DrawUtils.setAlign(TextAlign.LEFT); 53 | DrawUtils.setTextColor(0xFFFFFFFF); 54 | DrawUtils.enableStringBackground(); 55 | DrawUtils.drawString(startX + 2, startY + height + 8, this.trackingName == null ? "ent " + this.trackingEntityIdx : this.trackingName + " @ " + trackingDistance); 56 | trace.render(); 57 | diffGraph.render(); 58 | 59 | 60 | } 61 | 62 | @Override 63 | public void onLoop() { 64 | boolean work = Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R); 65 | if (!work) { 66 | startDrawing = false; 67 | return; 68 | } 69 | 70 | if (!startDrawing) { 71 | this.trackingEntityIdx = this.getClosestPlayer(); 72 | if (this.trackingEntityIdx == 0) { 73 | this.trackingEntity = 0; 74 | return; 75 | } 76 | 77 | this.trackingEntity = MemoryUtils.getEntity(this.trackingEntityIdx); 78 | 79 | long nameptr = Engine.clientModule().readLong(Offsets.m_dwPlayerResources + 0xF78 + this.trackingEntityIdx * 8); 80 | if (nameptr != 0) { 81 | this.trackingName = Engine.clientModule().readString(nameptr, 64); 82 | System.out.println("> " + this.trackingName); 83 | } else { 84 | this.trackingName = null; 85 | } 86 | 87 | startDrawing = true; 88 | trace.empty(); 89 | diffGraph.empty(); 90 | } 91 | 92 | float[] localOrigin = DrawUtils.lppos.getViewOrigin(); 93 | Engine.engineModule().read(this.trackingEntity + Netvars.CBaseEntity.m_vecOrigin, this.originbuf); 94 | this.origin.copyTo(this.trackingOrigin); 95 | 96 | float distance = MathUtils.VecDist(localOrigin, this.trackingOrigin); 97 | float[] diffOrigin = MathUtils.csubtract(localOrigin, this.trackingOrigin); 98 | 99 | if (distance == this.trackingDistance) { 100 | return; 101 | } 102 | 103 | trace.putSample(diffOrigin[0], diffOrigin[1]); 104 | diffGraph.putSample(distance); 105 | this.trackingDistance = distance; 106 | } 107 | 108 | protected int getClosestPlayer() { 109 | float[] localOrigin = DrawUtils.lppos.getViewOrigin(); 110 | float bestDistance = Float.MAX_VALUE; 111 | int bestEntityIdx = 0; 112 | float[] _tmpOrigin = new float[3]; 113 | 114 | long localPlayer = MemoryUtils.getLocalOrSpectated(); 115 | for (int i = 1; i < 64; i++) { 116 | long entityptr = MemoryUtils.getEntity(i); 117 | if (entityptr == 0 || entityptr == localPlayer) 118 | continue; 119 | 120 | int health = Engine.clientModule().readInt(entityptr + Netvars.CBasePlayer.m_iHealth); 121 | if (health < 1) 122 | continue; 123 | 124 | Engine.engineModule().read(entityptr + Netvars.CBaseEntity.m_vecOrigin, originbuf); 125 | origin.copyTo(_tmpOrigin); 126 | 127 | float distance = MathUtils.VecDist(localOrigin, _tmpOrigin); 128 | System.out.println("# " + i + ": " + StringFormat.dump(localOrigin) + " / " + StringFormat.dump(_tmpOrigin) + " = " + distance); 129 | if (distance < bestDistance) { 130 | bestDistance = distance; 131 | bestEntityIdx = i; 132 | } else 133 | continue; 134 | } 135 | 136 | return bestEntityIdx; 137 | } 138 | 139 | } 140 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/MapRender.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | 6 | import me.lixko.csgoexternals.util.bsp.BSPParser; 7 | 8 | public class MapRender extends Module { 9 | 10 | BSPParser bsp; 11 | 12 | @Override 13 | public void onWorldRender() { 14 | if(bsp == null) return; 15 | 16 | 17 | } 18 | 19 | @Override 20 | public void onEngineLoaded() { 21 | if(true) return; 22 | try { 23 | bsp = new BSPParser(new File("/home/erik/.steam/steam/steamapps/common/Counter-Strike Global Offensive/csgo/maps/de_dust2.bsp")); 24 | bsp.parse(); 25 | } catch (IOException e) { 26 | e.printStackTrace(); 27 | } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/Module.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.util.TreeMap; 4 | 5 | import com.sun.jna.platform.unix.X11.KeySym; 6 | 7 | import me.lixko.csgoexternals.Client; 8 | import me.lixko.csgoexternals.util.StringFormat; 9 | 10 | public class Module { 11 | 12 | private String moduleName; 13 | private int moduleBind; 14 | private boolean isToggled; 15 | private boolean isToggleable = true; 16 | 17 | public Module() { 18 | // Module name = class name 19 | this.moduleName = this.getClass().getSimpleName(); 20 | } 21 | 22 | public String getName() { 23 | return this.moduleName; 24 | } 25 | 26 | public int getBind() { 27 | return this.moduleBind; 28 | } 29 | 30 | public boolean isToggled() { 31 | return this.isToggled; 32 | } 33 | 34 | public boolean isToggleable() { 35 | return this.isToggleable; 36 | } 37 | 38 | public void setToggle(boolean shouldToggle) { 39 | if (this.isToggleable) { 40 | 41 | if (shouldToggle) { 42 | if (this.isToggled) { 43 | StringFormat.modtoggle(this.getName(), 3); 44 | } else { 45 | this.onEnable(); 46 | Client.theClient.moduleManager.setToggle(this.getName(), true); 47 | this.isToggled = true; 48 | StringFormat.modtoggle(this.getName(), 1); 49 | } 50 | } else { 51 | if (!this.isToggled) { 52 | StringFormat.modtoggle(this.getName(), 4); 53 | } else { 54 | this.onDisable(); 55 | Client.theClient.moduleManager.setToggle(this.getName(), false); 56 | this.isToggled = false; 57 | StringFormat.modtoggle(this.getName(), 2); 58 | } 59 | } 60 | } else { 61 | this.onToggle(); 62 | } 63 | } 64 | 65 | public void toggleModule() { 66 | this.setToggle(!this.isToggled()); 67 | } 68 | 69 | public void setToggleable(boolean newValue) { 70 | this.isToggleable = newValue; 71 | } 72 | 73 | public void onToggle() { 74 | } 75 | 76 | public void onEnable() { 77 | } 78 | 79 | public void onDisable() { 80 | } 81 | 82 | public boolean onCommand(String command) { 83 | System.out.println("Executing " + this.getName() + " command: " + command); 84 | return false; 85 | } 86 | 87 | public void onRegister() { 88 | } 89 | 90 | public void onPreLoop() { 91 | } 92 | 93 | public void onLoop() { 94 | } 95 | 96 | public void onUIRender() { 97 | } 98 | 99 | public void onPlayerRightClick() { 100 | } 101 | 102 | public void onModuleReset(String argstring) { 103 | } 104 | 105 | public void onDisconnect() { 106 | } 107 | 108 | public void onKeyPress(KeySym key) { 109 | } 110 | 111 | public void onEngineLoaded() { 112 | } 113 | 114 | public void onWorldRender() { 115 | } 116 | 117 | public void setStatusLabel(TreeMap map) { 118 | } 119 | 120 | public void onClientShutdown() { 121 | } 122 | 123 | public void onKeyRelease(KeySym key) { 124 | } 125 | 126 | } 127 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/MousePath.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.util.Arrays; 4 | 5 | import com.github.jonatino.misc.MemoryBuffer; 6 | 7 | import me.lixko.csgoexternals.Client; 8 | import me.lixko.csgoexternals.Engine; 9 | import me.lixko.csgoexternals.offsets.Netvars; 10 | import me.lixko.csgoexternals.offsets.Offsets; 11 | import me.lixko.csgoexternals.sdk.Const; 12 | import me.lixko.csgoexternals.structs.VectorMem; 13 | import me.lixko.csgoexternals.util.DrawUtils; 14 | import me.lixko.csgoexternals.util.GLTrace; 15 | import me.lixko.csgoexternals.util.MathUtils; 16 | import me.lixko.csgoexternals.util.MemoryUtils; 17 | import me.lixko.csgoexternals.util.StringFormat; 18 | import me.lixko.csgoexternals.util.TextAlign; 19 | import me.lixko.csgoexternals.util.XKeySym; 20 | 21 | public class MousePath extends Module { 22 | 23 | MemoryBuffer viewanglesbuf = new MemoryBuffer(Float.BYTES * 3); 24 | VectorMem viewangles = new VectorMem(viewanglesbuf); 25 | float[] startAngles = new float[3]; 26 | float[] angles = new float[3], oldAngles; 27 | GLTrace trace; 28 | boolean startDrawing = false; 29 | 30 | int startX = 50, startY = 450, width = 720, height = 360; 31 | 32 | @Override 33 | public void onEngineLoaded() { 34 | trace = new GLTrace(DrawUtils.gl, startX, startY, width, height, 400); 35 | //trace.setAutoscale(true); 36 | trace.setLineWidth(2.0f); 37 | trace.setScaleX(10.0f); 38 | trace.setScaleY(10.0f); 39 | trace.setColor(1f, 0f, 0f, 1f); 40 | } 41 | 42 | @Override 43 | public void onUIRender() { 44 | if(!Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R)) 45 | return; 46 | 47 | DrawUtils.setAlign(TextAlign.RIGHT); 48 | DrawUtils.setTextColor(0xFFFFFFFF); 49 | DrawUtils.enableStringBackground(); 50 | DrawUtils.drawString(startX + width - 2, startY + height + 8, "Engine ViewAngles"); 51 | trace.render(); 52 | } 53 | 54 | @Override 55 | public void onLoop() { 56 | boolean work = Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R); 57 | if (!work) { 58 | startDrawing = false; 59 | return; 60 | } else { 61 | long entityptr = MemoryUtils.getLocalOrSpectated(); 62 | if (entityptr == 0) 63 | return; 64 | 65 | int activeWeapon = Engine.clientModule().readInt(entityptr + Netvars.CBaseCombatCharacter.m_hActiveWeapon) & Const.ENT_ENTRY_MASK; 66 | long weaponptr = MemoryUtils.getEntity(activeWeapon); 67 | if (weaponptr == 0) 68 | return; 69 | 70 | float timeNow = Engine.globalVars.curtime.getFloat(); 71 | float timeFired = Engine.clientModule().readFloat(weaponptr + Netvars.CWeaponCSBase.m_fLastShotTime); 72 | 73 | if (timeNow - timeFired > 0.5f) { 74 | // return; 75 | } 76 | } 77 | 78 | Engine.engineModule().read(Offsets.m_dwClientState + Offsets.m_vecViewAngles, viewanglesbuf); 79 | viewangles.copyTo(angles); 80 | 81 | if (!startDrawing) { 82 | startDrawing = true; 83 | trace.empty(); 84 | oldAngles = null; 85 | startAngles = angles.clone(); 86 | } 87 | 88 | MathUtils.subtract(angles, startAngles); 89 | MathUtils.multiply(angles, -1f); 90 | 91 | 92 | if (oldAngles != null && Math.abs(oldAngles[1] - angles[1]) > 60f) { 93 | if (angles[1] > 0f && oldAngles[1] < 0f) { 94 | angles[1] -= 360f; 95 | } else if (angles[1] < 0f && oldAngles[1] > 0f) { 96 | angles[1] += 360f; 97 | } 98 | } 99 | 100 | if (oldAngles == null || !Arrays.equals(oldAngles, angles)) { 101 | trace.putSample(angles[1], angles[0]); 102 | //System.out.println("# sample " + trace.currentSample() + " / " + StringFormat.dump(angles)); 103 | oldAngles = angles.clone(); 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/MousePathNetprop.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.util.Arrays; 4 | 5 | import com.github.jonatino.misc.MemoryBuffer; 6 | 7 | import me.lixko.csgoexternals.Client; 8 | import me.lixko.csgoexternals.Engine; 9 | import me.lixko.csgoexternals.offsets.ItemDefinitionIndex; 10 | import me.lixko.csgoexternals.offsets.Netvars; 11 | import me.lixko.csgoexternals.offsets.Offsets; 12 | import me.lixko.csgoexternals.sdk.Const; 13 | import me.lixko.csgoexternals.structs.VectorMem; 14 | import me.lixko.csgoexternals.util.DrawUtils; 15 | import me.lixko.csgoexternals.util.GLGraph; 16 | import me.lixko.csgoexternals.util.GLTrace; 17 | import me.lixko.csgoexternals.util.MathUtils; 18 | import me.lixko.csgoexternals.util.MemoryUtils; 19 | import me.lixko.csgoexternals.util.StringFormat; 20 | import me.lixko.csgoexternals.util.TextAlign; 21 | import me.lixko.csgoexternals.util.XKeySym; 22 | 23 | public class MousePathNetprop extends Module { 24 | 25 | MemoryBuffer viewanglesbuf = new MemoryBuffer(Float.BYTES * 3); 26 | VectorMem viewangles = new VectorMem(viewanglesbuf); 27 | 28 | MemoryBuffer punchanglesbuf = new MemoryBuffer(Float.BYTES * 3); 29 | VectorMem punchangles = new VectorMem(punchanglesbuf); 30 | 31 | float[] startAngles = new float[3]; 32 | float[] angles = new float[3], oldAngles; 33 | float[] punch = new float[3]; 34 | GLTrace trace; 35 | boolean startDrawing = false; 36 | 37 | int width = 720, height = 360, startX = 1920 - 50 - width, startY = 450; 38 | 39 | GLGraph diffGraph; 40 | 41 | @Override 42 | public void onEngineLoaded() { 43 | diffGraph = new GLGraph(DrawUtils.gl, startX, startY, width, height, 5f, 400); 44 | diffGraph.setColor(0f, 1f, 1f, 1f); 45 | 46 | 47 | trace = new GLTrace(DrawUtils.gl, startX, startY, width, height, 400); 48 | //trace.setAutoscale(true); 49 | trace.setLineWidth(2.0f); 50 | trace.setScaleX(10.0f); 51 | trace.setScaleY(10.0f); 52 | trace.setColor(1f, 0f, 0f, 1f); 53 | } 54 | 55 | @Override 56 | public void onUIRender() { 57 | if(!Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R)) 58 | return; 59 | DrawUtils.setAlign(TextAlign.LEFT); 60 | DrawUtils.setTextColor(0xFFFFFFFF); 61 | DrawUtils.enableStringBackground(); 62 | DrawUtils.drawString(startX + 2, startY + height + 8, "CCSPlayer.m_angEyeAngles - m_aimPunchAngle"); 63 | trace.render(); 64 | diffGraph.render(); 65 | } 66 | 67 | @Override 68 | public void onLoop() { 69 | boolean work = Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R); 70 | if (!work) { 71 | startDrawing = false; 72 | return; 73 | } else { 74 | long entityptr = MemoryUtils.getLocalOrSpectated(); 75 | if (entityptr == 0) 76 | return; 77 | 78 | int activeWeapon = Engine.clientModule().readInt(entityptr + Netvars.CBaseCombatCharacter.m_hActiveWeapon) & Const.ENT_ENTRY_MASK; 79 | long weaponptr = MemoryUtils.getEntity(activeWeapon); 80 | if (weaponptr == 0) 81 | return; 82 | 83 | float timeNow = Engine.globalVars.curtime.getFloat(); 84 | float timeFired = Engine.clientModule().readFloat(weaponptr + Netvars.CWeaponCSBase.m_fLastShotTime); 85 | 86 | if (timeNow - timeFired > 0.5f) { 87 | // return; 88 | } 89 | } 90 | 91 | Engine.engineModule().read(Offsets.m_dwLocalPlayer + Netvars.CCSPlayer.m_angEyeAngles, viewanglesbuf); 92 | viewangles.copyTo(angles); 93 | Engine.clientModule().read(Offsets.m_dwLocalPlayer + Netvars.CBasePlayer.localdata.m_Local.BASE_OFFSET + Netvars.CBasePlayer.localdata.m_Local.m_aimPunchAngle, punchanglesbuf); 94 | punchangles.copyTo(punch); 95 | 96 | if (angles[0] > 90f) 97 | angles[0] -= 360f; 98 | 99 | if (angles[1] > 180f) 100 | angles[1] -= 360f; 101 | 102 | if (!startDrawing) { 103 | startDrawing = true; 104 | trace.empty(); 105 | diffGraph.empty(); 106 | oldAngles = null; 107 | startAngles = angles.clone(); 108 | } 109 | 110 | float[] diffAngles = MathUtils.cadd(startAngles, punch); 111 | MathUtils.subtract(diffAngles, angles); 112 | float diff = MathUtils.VecLength(diffAngles) * 2f; 113 | 114 | //System.out.println("EEEput sample " + trace.currentSample() + " / " + StringFormat.dump(angles)); 115 | 116 | MathUtils.subtract(angles, startAngles); 117 | MathUtils.multiply(angles, -1f); 118 | 119 | if (oldAngles != null && Math.abs(oldAngles[1] - angles[1]) > 60f) { 120 | if (angles[1] > 0f && oldAngles[1] < 0f) { 121 | angles[1] -= 360f; 122 | } else if (angles[1] < 0f && oldAngles[1] > 0f) { 123 | angles[1] += 360f; 124 | } 125 | } 126 | 127 | if (oldAngles == null || !Arrays.equals(oldAngles, angles)) { 128 | oldAngles = angles.clone(); 129 | 130 | MathUtils.subtract(angles, punch); 131 | trace.putSample(angles[1], angles[0]); 132 | //System.out.println("- sample " + trace.currentSample() + " / " + StringFormat.dump(angles)); 133 | 134 | 135 | diffGraph.putSample(diff); 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/NameHUD.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Client; 4 | import me.lixko.csgoexternals.Engine; 5 | import me.lixko.csgoexternals.offsets.Netvars; 6 | import me.lixko.csgoexternals.offsets.Offsets; 7 | import me.lixko.csgoexternals.util.ChatColor; 8 | import me.lixko.csgoexternals.util.DrawUtils; 9 | import me.lixko.csgoexternals.util.MemoryUtils; 10 | import me.lixko.csgoexternals.util.StringFormat; 11 | import me.lixko.csgoexternals.util.TextAlign; 12 | 13 | public class NameHUD extends Module { 14 | 15 | RankReveal rankreveal; 16 | 17 | long lastspottedtime = 0; 18 | String lastspottedname = ""; 19 | int lastspottedenti = 0; 20 | long lastspottedentptr = 0; 21 | int lastspottedteam = 0; 22 | int lastspottedhealth = 0; 23 | 24 | @Override 25 | public void onUIRender() { 26 | if (!this.isToggled() || Offsets.m_dwLocalPlayer == 0) 27 | return; 28 | //System.out.println(DrawUtils.getScreenWidth() / 6); 29 | if (lastspottedtime + 1500 < System.currentTimeMillis()) 30 | return; 31 | if (lastspottedenti == 0) 32 | return; 33 | DrawUtils.setAlign(TextAlign.CENTER); 34 | if (lastspottedteam == 2) 35 | DrawUtils.setTextColor(0.878f, 0.686f, 0.337f); 36 | else 37 | DrawUtils.setTextColor(0.54f, 0.72f, 1.0f); 38 | DrawUtils.setAlign(TextAlign.CENTER); 39 | long elapsed = System.currentTimeMillis() - lastspottedtime; 40 | elapsed -= 500; 41 | elapsed = Math.max(elapsed, 0); 42 | float alpha = 1f - Math.min(1, elapsed / 1000f); 43 | DrawUtils.disableTextBackgroundColor(); 44 | DrawUtils.setTextBGColorToDefault(alpha * DrawUtils.getDefaultTextBGAlpha()); 45 | DrawUtils.setTextAlpha(alpha); 46 | DrawUtils.drawString(DrawUtils.getScreenWidth() / 2, DrawUtils.getScreenHeight() / 2 - 50, ChatColor.LARGE + lastspottedname); 47 | DrawUtils.setTextBGColorToDefault(alpha * DrawUtils.getDefaultTextBGAlpha()); 48 | DrawUtils.setTextColor(0.80f, 0.1f, 0.1f, alpha); 49 | DrawUtils.drawString(DrawUtils.getScreenWidth() / 2, DrawUtils.getScreenHeight() / 2 - 80, "" + ChatColor.LARGE + lastspottedhealth); 50 | DrawUtils.enableTextBackgroundColor(); 51 | 52 | rankreveal.drawWeapons(lastspottedentptr, lastspottedenti, DrawUtils.getScreenWidth() / 2 + 100, DrawUtils.getScreenHeight() / 2 - 110, alpha); 53 | } 54 | 55 | @Override 56 | public void onLoop() { 57 | if (!this.isToggled()) 58 | return; 59 | //if(true) return; 60 | int inCross = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + Offsets.m_iCrosshairIndex); 61 | if (inCross == lastspottedenti && lastspottedtime + 100 > System.currentTimeMillis()) { 62 | lastspottedtime = System.currentTimeMillis(); 63 | return; 64 | } 65 | 66 | if (inCross > 0) { 67 | long cEnt = MemoryUtils.getEntity(inCross); 68 | lastspottedentptr = cEnt; 69 | if (cEnt > 0) { 70 | int cHealth = Engine.clientModule().readInt(cEnt + Netvars.CBasePlayer.m_iHealth); 71 | if (cHealth > 0) { 72 | lastspottedenti = inCross; 73 | lastspottedname = rankreveal.names[inCross]; 74 | lastspottedtime = System.currentTimeMillis(); 75 | lastspottedteam = Engine.clientModule().readInt(cEnt + Netvars.CBaseEntity.m_iTeamNum); 76 | lastspottedhealth = Engine.clientModule().readInt(cEnt + Netvars.CBasePlayer.m_iHealth); 77 | } 78 | } 79 | } 80 | } 81 | 82 | @Override 83 | public void onEngineLoaded() { 84 | rankreveal = (RankReveal) Client.theClient.moduleManager.getModule("RankReveal"); 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/NoFlash.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Engine; 4 | import me.lixko.csgoexternals.offsets.Netvars; 5 | import me.lixko.csgoexternals.offsets.Offsets; 6 | 7 | public class NoFlash extends Module { 8 | 9 | @Override 10 | public void onLoop() { 11 | if (!this.isToggled() || Offsets.m_dwLocalPlayer == 0) 12 | return; 13 | if (Engine.clientModule().readFloat(Offsets.m_dwLocalPlayer + Netvars.CCSPlayer.m_flFlashMaxAlpha) > 70f) 14 | Engine.clientModule().writeFloat(Offsets.m_dwLocalPlayer + Netvars.CCSPlayer.m_flFlashMaxAlpha, 100f); 15 | } 16 | 17 | @Override 18 | public void onDisable() { 19 | Engine.clientModule().writeFloat(Offsets.m_dwLocalPlayer + Netvars.CCSPlayer.m_flFlashMaxAlpha, 255f); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/NoHands.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import me.lixko.csgoexternals.Engine; 4 | import me.lixko.csgoexternals.offsets.Netvars; 5 | import me.lixko.csgoexternals.offsets.Offsets; 6 | 7 | public class NoHands extends Module { 8 | 9 | @Override 10 | public void onLoop() { 11 | if (Offsets.m_dwLocalPlayer == 0 || !this.isToggled()) 12 | return; 13 | Engine.clientModule().writeInt(Offsets.m_dwLocalPlayer + Netvars.CBaseEntity.m_nModelIndex, 20); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/RCS.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.structs.VectorMem; 10 | import me.lixko.csgoexternals.util.DrawUtils; 11 | import me.lixko.csgoexternals.util.MathUtils; 12 | import me.lixko.csgoexternals.util.StringFormat; 13 | import me.lixko.csgoexternals.util.XKeySym; 14 | 15 | public class RCS extends Module { 16 | 17 | MemoryBuffer viewanglesbuf = new MemoryBuffer(Float.BYTES * 3); 18 | VectorMem viewangles = new VectorMem(viewanglesbuf); 19 | float[] va = new float[3]; 20 | float[] old = new float[3]; 21 | 22 | @Override 23 | public void onLoop() { 24 | //if(!this.isToggled()) return; 25 | boolean work = Client.theClient.keyboardHandler.isPressed(XKeySym.XK_R); 26 | int shotsFired = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + Netvars.CCSPlayer.cslocaldata.BASE_OFFSET + Netvars.CCSPlayer.cslocaldata.m_iShotsFired); 27 | if (!work || shotsFired < 1) { 28 | old[0] = 0; 29 | old[1] = 0; 30 | old[2] = 0; 31 | return; 32 | } 33 | 34 | Engine.engineModule().read(Offsets.m_dwClientState + Offsets.m_vecViewAngles, viewanglesbuf); 35 | viewangles.copyTo(va); 36 | MathUtils.add(va, old); 37 | float[] punch = MathUtils.cmultiply(DrawUtils.lppos.getAimPunch(), 2f); 38 | MathUtils.subtract(va, punch); 39 | 40 | // https://www.unknowncheats.me/forum/counterstrike-global-offensive/115653-visual-aim-punch.html 41 | 42 | old = punch; 43 | 44 | MathUtils.ClampAngle(va); 45 | viewangles.readFrom(va); 46 | Engine.engineModule().write(Offsets.m_dwClientState + Offsets.m_vecViewAngles, viewanglesbuf); 47 | 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/RecoilCross.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.structs.VectorMem; 10 | import me.lixko.csgoexternals.util.DrawUtils; 11 | 12 | public class RecoilCross extends Module { 13 | 14 | private boolean needsDataUpdate = false; 15 | private VectorMem punchvec = new VectorMem(); 16 | private MemoryBuffer lpvecbuf = new MemoryBuffer(punchvec.size()); 17 | 18 | private final int fov = 90; 19 | private final int sx = (int) (DrawUtils.getScreenWidth() * 0.5f); 20 | private final int sy = (int) (DrawUtils.getScreenHeight() * 0.5f); 21 | private final int dx = DrawUtils.getScreenWidth() / fov; 22 | private final int dy = DrawUtils.getScreenHeight() / fov; 23 | private int crosshairX = sx; 24 | private int crosshairY = sy; 25 | private float crossalpha = 0.0f; 26 | 27 | Thread updateLoop = new Thread(new Runnable() { 28 | @Override 29 | public void run() { 30 | while (Client.theClient.isRunning) { 31 | try { 32 | Thread.sleep(2); 33 | if (!needsDataUpdate || Offsets.m_dwLocalPlayer == 0) 34 | continue; 35 | 36 | Engine.clientModule().read(Offsets.m_dwLocalPlayer + Netvars.CBasePlayer.localdata.m_Local.BASE_OFFSET + Netvars.CBasePlayer.localdata.m_Local.m_aimPunchAngle, lpvecbuf.size(), lpvecbuf); 37 | float pvecy = punchvec.y.getFloat(); 38 | float pvecx = punchvec.x.getFloat(); 39 | crosshairX = (int) (sx - (dx * pvecy)); 40 | crosshairY = (int) (sy - (dy * pvecx)); 41 | crossalpha = (float) Math.min(((Math.abs(pvecx) + Math.abs(pvecy)) * 0.7f), 1.0f); 42 | needsDataUpdate = false; 43 | } catch (Exception e) { 44 | e.printStackTrace(); 45 | try { 46 | Thread.sleep(500); 47 | } catch (InterruptedException e1) { 48 | e1.printStackTrace(); 49 | } 50 | } 51 | } 52 | } 53 | }); 54 | 55 | @Override 56 | public void onUIRender() { 57 | if (!Client.theClient.isRunning || this.needsDataUpdate || !this.isToggled()) 58 | return; 59 | this.needsDataUpdate = true; 60 | 61 | DrawUtils.setLineWidth(1.0f); 62 | DrawUtils.setColor(0, 0, 0, Math.max(crossalpha - 0.2f, 0.0f)); 63 | DrawUtils.fillRectanglew(crosshairX - 6, crosshairY - 1, 12, 3); 64 | DrawUtils.fillRectanglew(crosshairX - 1, crosshairY - 6, 3, 12); 65 | 66 | DrawUtils.setColor(1.0f, 1.0f, 1.0f, crossalpha); 67 | DrawUtils.drawLine(crosshairX - 5, crosshairY + 1, crosshairX + 5, crosshairY + 1); 68 | DrawUtils.drawLine(crosshairX + 1, crosshairY + 5, crosshairX + 1, crosshairY - 5); 69 | } 70 | 71 | @Override 72 | public void onEngineLoaded() { 73 | punchvec.setSource(lpvecbuf); 74 | updateLoop.start(); 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/SkinChanger.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Offsets; 8 | import me.lixko.csgoexternals.structs.BaseAttributableItem; 9 | import me.lixko.csgoexternals.util.MemoryUtils; 10 | 11 | public class SkinChanger extends Module { 12 | 13 | BaseAttributableItem itemobj = new BaseAttributableItem(); 14 | MemoryBuffer itemobjbuf = new MemoryBuffer(itemobj.size()); 15 | 16 | Thread skinChangerLoop = new Thread(new Runnable() { 17 | @Override 18 | public void run() { 19 | while (Client.theClient.isRunning) { 20 | try { 21 | Thread.sleep(2); 22 | if (Offsets.m_dwLocalPlayer == 0 || Offsets.m_dwEntityList == 0) 23 | continue; 24 | 25 | for (int w = 0; w < 64; w++) { 26 | int weaponentindex = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + 0x3528 + 4 * (w - 1)) & 0xFFF; 27 | if (weaponentindex == 0) 28 | continue; 29 | long weaponptr = MemoryUtils.getEntity(weaponentindex); 30 | if (weaponptr == 0) 31 | continue; 32 | Engine.clientModule().read(weaponptr + 0x34c0, itemobjbuf); 33 | int m_iItemDefinitionIndex = itemobj.m_iItemDefinitionIndex.getInt(); 34 | if (m_iItemDefinitionIndex != 9) 35 | continue; 36 | 37 | int m_nFallbackPaintKit = itemobj.m_nFallbackPaintKit.getInt(); 38 | int m_OriginalOwnerXuidLow = itemobj.m_OriginalOwnerXuidLow.getInt(); 39 | itemobj.m_nFallbackPaintKit.set(279); 40 | itemobj.m_nFallbackSeed.set(-1); 41 | itemobj.m_nFallbackStatTrak.set(6262); 42 | itemobj.m_iEntityQuality.set(4); 43 | itemobj.m_flFallbackWear.set(0.05f); 44 | itemobj.m_iItemIDHigh.set(-1); // When iItemIDHigh is set to non zero value, fallback values will be used. 45 | itemobj.m_iAccountID.set(m_OriginalOwnerXuidLow); 46 | // System.out.println(weaponentindex + " > " + m_iItemDefinitionIndex + " / " + m_nFallbackPaintKit + " / " + MemoryUtils.getEntityClassName(weaponptr)); 47 | for (int i = 0; i < 100; i++) { 48 | Engine.clientModule().write(weaponptr + 0x34c0, itemobjbuf); 49 | Thread.sleep(1); 50 | } 51 | } 52 | // System.out.println("----------------"); 53 | } catch (Exception e) { 54 | e.printStackTrace(); 55 | return; 56 | } 57 | } 58 | } 59 | }); 60 | 61 | @Override 62 | public void onEngineLoaded() { 63 | itemobj.setSource(itemobjbuf); 64 | // skinChangerLoop.start(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/modules/Spectators.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.modules; 2 | 3 | import java.util.ArrayList; 4 | 5 | import me.lixko.csgoexternals.Client; 6 | import me.lixko.csgoexternals.Engine; 7 | import me.lixko.csgoexternals.offsets.Netvars; 8 | import me.lixko.csgoexternals.offsets.Offsets; 9 | import me.lixko.csgoexternals.sdk.Const; 10 | import me.lixko.csgoexternals.util.ChatColor; 11 | import me.lixko.csgoexternals.util.DrawUtils; 12 | import me.lixko.csgoexternals.util.MemoryUtils; 13 | import me.lixko.csgoexternals.util.StringFormat; 14 | import me.lixko.csgoexternals.util.TextAlign; 15 | 16 | public class Spectators extends Module { 17 | RankReveal rankreveal; 18 | 19 | ArrayList spectators = new ArrayList(); 20 | int loopc = 0; 21 | 22 | @Override 23 | public void onUIRender() { 24 | if (!this.isToggled() || Offsets.m_dwLocalPlayer == 0) 25 | return; 26 | int i = 0; 27 | DrawUtils.setTextColor(0xBBBBBBFF); 28 | DrawUtils.setAlign(TextAlign.LEFT); 29 | for (String name : spectators) { 30 | DrawUtils.drawString(290, DrawUtils.getScreenHeight() - 50 - i * 15, ChatColor.SMALL + name); 31 | i++; 32 | } 33 | } 34 | 35 | @Override 36 | public void onLoop() { 37 | if (!this.isToggled() || Offsets.m_dwLocalPlayer == 0) 38 | return; 39 | loopc++; 40 | if (loopc < 90) 41 | return; 42 | loopc = 0; 43 | spectators.clear(); 44 | int lpobstarget = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + Netvars.CBasePlayer.m_hObserverTarget) & Const.ENT_ENTRY_MASK; 45 | for (int i = 1; i < 64; i++) { 46 | long entptr = MemoryUtils.getEntity(i); 47 | if (rankreveal.res.m_bAlive.getBoolean(i)) 48 | continue; 49 | if (entptr == 0 || entptr == Offsets.m_dwLocalPlayer) 50 | continue; 51 | int obs = Engine.clientModule().readInt(entptr + Netvars.CBasePlayer.m_hObserverTarget) & Const.ENT_ENTRY_MASK; 52 | if (obs == Const.ENT_ENTRY_MASK || obs != lpobstarget) 53 | continue; 54 | 55 | spectators.add(rankreveal.names[i]); 56 | } 57 | 58 | } 59 | 60 | @Override 61 | public void onEngineLoaded() { 62 | rankreveal = (RankReveal) Client.theClient.moduleManager.getModule("RankReveal"); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/AttributableItemType.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.offsets; 2 | 3 | public enum AttributableItemType { 4 | AUTOMATIC, 5 | SNIPER, 6 | SHOTGUN, 7 | PISTOL, 8 | GRENADE, 9 | KNIFE, 10 | OTHER; 11 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/Convar.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.offsets; 2 | 3 | import me.lixko.csgoexternals.elf.GameInterface; 4 | 5 | public class Convar { 6 | 7 | private long base = 0; 8 | private String name; 9 | private final GameInterface cvarif; 10 | 11 | public Convar(GameInterface materialModule, long base, String name) { 12 | this.base = base; 13 | this.cvarif = materialModule; 14 | this.name = name; 15 | } 16 | 17 | public long getBase() { 18 | return this.base; 19 | } 20 | 21 | public String getName() { 22 | return this.name; 23 | } 24 | 25 | public GameInterface getGameInterface() { 26 | return this.cvarif; 27 | } 28 | 29 | public int getInt() { 30 | return (int) (this.cvarif.getModule().readInt(this.base + 0x58) ^ this.base); 31 | } 32 | 33 | public float getFloat() { 34 | return Float.intBitsToFloat((int) (this.cvarif.getModule().readInt(this.base + 0x54) ^ this.base)); 35 | } 36 | 37 | public String getString() { 38 | long strptr = this.cvarif.getModule().readLong(this.base + 0x48); 39 | return this.cvarif.getModule().readString(strptr, 1024); 40 | } 41 | 42 | public void setInt(int val) throws Exception { 43 | if (true) { 44 | throw new Exception("This is detected! You must write into a backup register, too. See: https://www.unknowncheats.me/forum/3556676-post25.html"); 45 | } 46 | this.cvarif.getModule().writeInt(this.base + 0x58, (int) (val ^ this.base)); 47 | } 48 | 49 | public void setFloat(float val) throws Exception { 50 | if (true) { 51 | throw new Exception("This is detected! You must write into a backup register, too."); 52 | } 53 | this.cvarif.getModule().writeInt(this.base + 0x58, (int) (Float.floatToIntBits(val) ^ this.base)); 54 | } 55 | 56 | public void setString(String str) { 57 | // TODO: Not yet implemented 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/Convars.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.offsets; 2 | 3 | import java.util.HashMap; 4 | 5 | import me.lixko.csgoexternals.elf.ElfModule; 6 | import me.lixko.csgoexternals.elf.GameInterface; 7 | import me.lixko.csgoexternals.util.StringFormat; 8 | 9 | public class Convars { 10 | 11 | private static HashMap convars = new HashMap<>(); 12 | private static GameInterface cvarif; 13 | 14 | public static void init(ElfModule materialModule) { 15 | cvarif = materialModule.getInterfacePartially("VEngineCvar"); 16 | // TODO: Check the deref. code in GameInterface() 17 | System.out.println(cvarif.getName()); 18 | System.out.println("getIfRegBase: " + StringFormat.hex(cvarif.getIfRegBase())); 19 | System.out.println("getInstantiateFn: " + StringFormat.hex(cvarif.getInstantiateFn())); 20 | System.out.println("getVFTPointer: " + StringFormat.hex(cvarif.getVFTPointer())); 21 | System.out.println("getVFTBase: " + StringFormat.hex(cvarif.getVFTBase())); 22 | long a0 = cvarif.getModule().readLong(cvarif.getVFTBase() + 136); // m_pCVarList 23 | 24 | do { 25 | long strptr = cvarif.getModule().readLong(a0 + 0x18); 26 | System.out.println("strptr: " + StringFormat.hex(strptr)); 27 | String str = cvarif.getModule().readString(strptr, 256); 28 | System.out.println("str: " + str); 29 | Convar cvar = new Convar(cvarif, a0, str); 30 | convars.put(str, cvar); 31 | } while ((a0 = cvarif.getModule().readLong(a0 + 0x8)) > 0); 32 | } 33 | 34 | public static Convar getConvar(String name) { 35 | return convars.get(name); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/InputOffsets.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.offsets; 2 | 3 | public class InputOffsets { 4 | 5 | public long grenade2; // === zoom_out 6 | public long grenade1; // === zoom_in 7 | public long in_break; 8 | public long score; 9 | public long alt2; 10 | public long alt1; 11 | public long reload; 12 | public long duck; 13 | public long movedown; 14 | public long moveup; 15 | public long jump; 16 | public long use; 17 | public long lookdown; 18 | public long lookup; 19 | public long right; 20 | public long left; 21 | public long klook; 22 | 23 | 24 | 25 | public long zoom; 26 | public long attack2; 27 | public long attack; 28 | public long use_or_reload; 29 | public long lookspin; 30 | // 3 unknown items 31 | public long graph; 32 | public long moveright; 33 | public long moveleft; 34 | public long back; 35 | public long forward; 36 | public long commandermousemove; 37 | public long strafe; 38 | public long jlook; 39 | public long walk; 40 | public long speed; 41 | 42 | 43 | public void init() { 44 | 45 | // https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/client/in_main.cpp#L112 46 | int i = -5; // positions between alt1 and grenade2 47 | grenade2 = alt1 + 0x10 * i++; 48 | grenade1 = alt1 + 0x10 * i++; 49 | in_break = alt1 + 0x10 * i++; 50 | score = alt1 + 0x10 * i++; 51 | alt2 = alt1 + 0x10 * i++; 52 | alt1 = alt1 + 0x10 * i++; 53 | reload = alt1 + 0x10 * i++; 54 | duck = alt1 + 0x10 * i++; 55 | movedown = alt1 + 0x10 * i++; 56 | moveup = alt1 + 0x10 * i++; 57 | jump = alt1 + 0x10 * i++; 58 | use = alt1 + 0x10 * i++; 59 | lookdown = alt1 + 0x10 * i++; 60 | lookup = alt1 + 0x10 * i++; 61 | right = alt1 + 0x10 * i++; 62 | left = alt1 + 0x10 * i++; 63 | klook = alt1 + 0x10 * i++; 64 | 65 | int j = -2; // positions between attack and zoom 66 | zoom = attack + 0x10 * j++; 67 | attack2 = attack + 0x10 * j++; 68 | attack = attack + 0x10 * j++; 69 | use_or_reload = attack + 0x10 * j++; 70 | lookspin = attack + 0x10 * j++; 71 | j += 3; // 3 unknown items 72 | graph = attack + 0x10 * j++; 73 | moveright = attack + 0x10 * j++; 74 | moveleft = attack + 0x10 * j++; 75 | back = attack + 0x10 * j++; 76 | forward = attack + 0x10 * j++; 77 | commandermousemove = attack + 0x10 * j++; 78 | strafe = attack + 0x10 * j++; 79 | jlook = attack + 0x10 * j++; 80 | walk = attack + 0x10 * j++; 81 | speed = attack + 0x10 * j++; 82 | 83 | // TODO: Hash registers, some anti-cheat measure? Should the cmd be also written to them (-0x8 for all)? 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/ItemDefinitionIndex.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.offsets; 2 | 3 | import java.util.HashMap; 4 | 5 | public enum ItemDefinitionIndex { 6 | WEAPON_NONE(0, AttributableItemType.OTHER), 7 | WEAPON_DEAGLE(1, AttributableItemType.PISTOL), 8 | WEAPON_ELITE(2, AttributableItemType.PISTOL), 9 | WEAPON_FIVESEVEN(3, AttributableItemType.PISTOL), 10 | WEAPON_GLOCK(4, AttributableItemType.PISTOL), 11 | WEAPON_AK47(7, AttributableItemType.AUTOMATIC), 12 | WEAPON_AUG(8, AttributableItemType.AUTOMATIC), 13 | WEAPON_AWP(9, AttributableItemType.SNIPER), 14 | WEAPON_FAMAS(10, AttributableItemType.AUTOMATIC), 15 | WEAPON_G3SG1(11, AttributableItemType.AUTOMATIC), 16 | WEAPON_GALILAR(13, AttributableItemType.AUTOMATIC), 17 | WEAPON_M249(14, AttributableItemType.AUTOMATIC), 18 | WEAPON_M4A1(16, AttributableItemType.AUTOMATIC), 19 | WEAPON_MAC10(17, AttributableItemType.AUTOMATIC), 20 | WEAPON_P90(19, AttributableItemType.AUTOMATIC), 21 | WEAPON_UMP45(24, AttributableItemType.AUTOMATIC), 22 | WEAPON_XM1014(25, AttributableItemType.SHOTGUN), 23 | WEAPON_BIZON(26, AttributableItemType.AUTOMATIC), 24 | WEAPON_MAG7(27, AttributableItemType.SHOTGUN), 25 | WEAPON_NEGEV(28, AttributableItemType.AUTOMATIC), 26 | WEAPON_SAWEDOFF(29, AttributableItemType.SHOTGUN), 27 | WEAPON_TEC9(30, AttributableItemType.PISTOL), 28 | WEAPON_TASER(31, AttributableItemType.OTHER), 29 | WEAPON_HKP2000(32, AttributableItemType.PISTOL), 30 | WEAPON_MP7(33, AttributableItemType.AUTOMATIC), 31 | WEAPON_MP9(34, AttributableItemType.AUTOMATIC), 32 | WEAPON_NOVA(35, AttributableItemType.SHOTGUN), 33 | WEAPON_P250(36, AttributableItemType.PISTOL), 34 | WEAPON_SCAR20(38, AttributableItemType.AUTOMATIC), 35 | WEAPON_SG556(39, AttributableItemType.AUTOMATIC), 36 | WEAPON_SSG08(40, AttributableItemType.SNIPER), 37 | WEAPON_KNIFE(42, AttributableItemType.KNIFE), 38 | WEAPON_FLASHBANG(43, AttributableItemType.GRENADE), 39 | WEAPON_HEGRENADE(44, AttributableItemType.GRENADE), 40 | WEAPON_SMOKEGRENADE(45, AttributableItemType.GRENADE), 41 | WEAPON_MOLOTOV(46, AttributableItemType.GRENADE), 42 | WEAPON_DECOY(47, AttributableItemType.GRENADE), 43 | WEAPON_INCGRENADE(48, AttributableItemType.GRENADE), 44 | WEAPON_C4(49, AttributableItemType.OTHER), 45 | WEAPON_KNIFE_T(59, AttributableItemType.KNIFE), 46 | WEAPON_M4A1_SILENCER(60, AttributableItemType.AUTOMATIC), 47 | WEAPON_USP_SILENCER(61, AttributableItemType.PISTOL), 48 | WEAPON_CZ75A(63, AttributableItemType.PISTOL), 49 | WEAPON_REVOLVER(64, AttributableItemType.PISTOL), 50 | WEAPON_KNIFE_BAYONET(500, AttributableItemType.KNIFE), 51 | WEAPON_KNIFE_FLIP(505, AttributableItemType.KNIFE), 52 | WEAPON_KNIFE_GUT(506, AttributableItemType.KNIFE), 53 | WEAPON_KNIFE_KARAMBIT(507, AttributableItemType.KNIFE), 54 | WEAPON_KNIFE_M9_BAYONET(508, AttributableItemType.KNIFE), 55 | WEAPON_KNIFE_TACTICAL(509, AttributableItemType.KNIFE), 56 | WEAPON_KNIFE_FALCHION(512, AttributableItemType.KNIFE), 57 | WEAPON_KNIFE_SURVIVAL_BOWIE(514, AttributableItemType.KNIFE), 58 | WEAPON_KNIFE_BUTTERFLY(515, AttributableItemType.KNIFE), 59 | WEAPON_KNIFE_PUSH(516, AttributableItemType.KNIFE); 60 | 61 | private final static HashMap ids = new HashMap(); 62 | private final int id; 63 | private final AttributableItemType type; 64 | 65 | static { 66 | if (ids.size() != ItemDefinitionIndex.values().length) 67 | for (int i = 0; i < values().length; i++) { 68 | ids.put(values()[i].id, values()[i]); 69 | } 70 | } 71 | 72 | ItemDefinitionIndex(int id, AttributableItemType type) { 73 | this.id = id; 74 | this.type = type; 75 | } 76 | 77 | public int id() { 78 | return id; 79 | } 80 | 81 | public AttributableItemType type() { 82 | return type; 83 | } 84 | 85 | public static ItemDefinitionIndex byID(int x) { 86 | if (ids.get(x) == null) 87 | return WEAPON_NONE; 88 | else 89 | return ids.get(x); 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/offsets/PatternScanner.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 Jonathan Beaudoin 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package me.lixko.csgoexternals.offsets; 18 | 19 | import java.util.Arrays; 20 | 21 | import com.github.jonatino.misc.Cacheable; 22 | import com.github.jonatino.process.Module; 23 | 24 | import me.lixko.csgoexternals.util.StringFormat; 25 | 26 | public final class PatternScanner { 27 | 28 | public static final int READ = 1, SUBTRACT = 2; 29 | 30 | public static long getAddressForPattern(Module module, int pattern_offset, int address_offset, int flags, String className) { 31 | return getAddressForPattern(module, pattern_offset, address_offset, flags, null, className.getBytes()); 32 | } 33 | 34 | public static long getAddressForPattern(Module module, int pattern_offset, int address_offset, int flags, int... values) { 35 | return getAddressForPattern(module, pattern_offset, address_offset, flags, null, toByteArray(values)); 36 | } 37 | 38 | /** 39 | * Match an IDA-style signature (EF F3 ?? ?? 00 00). 40 | * 41 | * @param module 42 | * @param sigstr 43 | * @return 44 | */ 45 | public static long getAddressForPattern(Module module, String sigstr) { 46 | return getAddressForPattern(module, 0, 0, 0, hexStringToMask(sigstr), hexStringToByteArray(sigstr)); 47 | } 48 | 49 | /** 50 | * Find a signature in the memory space of the provided Module. 51 | * 52 | * @param module 53 | * @param pattern_offset 54 | * @param address_offset 55 | * @param flags 56 | * @param mask If null, values are matched only if they're truly equal. Only 0xff/0x00 supported at the moment. 57 | * @param values Bytes to match against, must align with mask. 58 | * @return 59 | */ 60 | public static long getAddressForPattern(Module module, int pattern_offset, int address_offset, int flags, byte[] mask, byte[] values) { 61 | if (mask == null) { 62 | mask = new byte[values.length]; 63 | Arrays.fill(mask, (byte) 0xff); 64 | } 65 | 66 | long off = module.size() - values.length; 67 | for (long i = 0; i < off; i++) { 68 | if (checkMask(module, i, mask, values)) { 69 | i += module.start() + pattern_offset; 70 | if ((flags & READ) == READ) { 71 | i = module.process().readLong(i); 72 | } 73 | if ((flags & SUBTRACT) == SUBTRACT) { 74 | i -= module.start(); 75 | } 76 | return i + address_offset; 77 | } 78 | } 79 | throw new IllegalStateException("Can not find offset inside of " + module.name() + " with pattern " + StringFormat.hex(values)); // + Arrays.toString(values)); 80 | } 81 | 82 | private static boolean checkMask(Module module, long offset, byte[] mask, byte[] data) { 83 | for (int i = 0; i < data.length; i++) { 84 | if (mask[i] != 0x00 && (data[i] != module.data().getByte(offset + i))) { 85 | return false; 86 | } 87 | } 88 | return true; 89 | } 90 | 91 | private static byte[] toByteArray(int... value) { 92 | byte[] byteVals = Cacheable.array(value.length); 93 | for (int i = 0; i < value.length; i++) { 94 | byteVals[i] = (byte) value[i]; 95 | } 96 | return byteVals; 97 | } 98 | 99 | public static byte[] hexStringToByteArray(String str) { 100 | String s = str.replaceAll("\\s+", "").replace("??", "00").toUpperCase(); 101 | int len = s.length(); 102 | byte[] data = new byte[len / 2]; 103 | for (int i = 0; i < len; i += 2) { 104 | data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16)); 105 | } 106 | return data; 107 | } 108 | 109 | public static byte[] hexStringToMask(String str) { 110 | String s = str.replaceAll("\\s+", "").toUpperCase(); 111 | int len = s.length(); 112 | byte[] data = new byte[len / 2]; 113 | for (int i = 0; i < len; i += 2) { 114 | if (s.charAt(i) == '?' && s.charAt(i + 1) == '?') { 115 | data[i / 2] = (byte) 0x00; 116 | } else { 117 | data[i / 2] = (byte) 0xff; 118 | } 119 | } 120 | return data; 121 | } 122 | 123 | } 124 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/sdk/BoneList.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.sdk; 2 | 3 | public enum BoneList { 4 | BONE_PELVIS(2), 5 | BONE_SPINE0(3), 6 | BONE_SPINE1(4), 7 | BONE_SPINE2(5), 8 | BONE_SPINE3(6), 9 | BONE_NECK(7), 10 | BONE_HEAD(8), 11 | // BONE_L_UPPER_ARM = 11, 12 | // BONE_L_FOREARM = 12, 13 | // BONE_R_UPPER_ARM = 41, 14 | // BONE_R_FOREARM = 42, 15 | // BONE_L_THIGH = 70, 16 | // BONE_L_CALF = 71, 17 | // BONE_R_THIGH = 77, 18 | // BONE_R_CALF = 78, 19 | BONE_MAX(9); 20 | 21 | public int index = 0; 22 | 23 | BoneList(int index) { 24 | this.index = index; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/sdk/DemoFormat.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.sdk; 2 | 3 | import me.lixko.csgoexternals.util.BufferStruct; 4 | import java.nio.charset.StandardCharsets; 5 | 6 | public class DemoFormat { 7 | public static final int MAX_OSPATH = 260; 8 | public static final String DEMO_HEADER_ID_STR = "HL2DEMO"; 9 | public static final byte[] DEMO_HEADER_ID = "HL2DEMO\0".getBytes(); 10 | public static final int DEMO_PROTOCOL = 4; 11 | 12 | public static final int FDEMO_NORMAL = 0; 13 | public static final int FDEMO_USE_ORIGIN2 = (1 << 0); 14 | public static final int FDEMO_USE_ANGLES2 = (1 << 1); 15 | public static final int FDEMO_NOINTERP = (1 << 2); // don't interpolate between this an last view 16 | public static final int MAX_SPLITSCREEN_CLIENTS = 2; 17 | 18 | public enum dem_msg { 19 | dem_0, 20 | // it's a startup message, process as fast as possible 21 | dem_signon, 22 | // it's a normal network packet that we stored off 23 | dem_packet, 24 | // sync client clock to demo tick 25 | dem_synctick, 26 | // console command 27 | dem_consolecmd, 28 | // user input command 29 | dem_usercmd, 30 | // network data tables 31 | dem_datatables, 32 | // end of time. 33 | dem_stop, 34 | // a blob of binary data 35 | dem_customData, 36 | dem_stringtables, 37 | // Last command 38 | dem_lastcmd 39 | }; 40 | 41 | public static class demoheader_t extends BufferStruct { 42 | public byte[] demofilestamp = new byte[8]; // Should be HL2DEMO 43 | //@StringLength(size = 8, charset = "UTF-8") 44 | //public String demofilestamp = ""; 45 | public int demoprotocol; // Should be DEMO_PROTOCOL 46 | public int networkprotocol; // Should be PROTOCOL_VERSION 47 | public byte[] servername = new byte[MAX_OSPATH]; // Name of server 48 | public byte[] clientname = new byte[MAX_OSPATH]; // Name of client who recorded the game 49 | public byte[] mapname = new byte[MAX_OSPATH]; // Name of map 50 | public byte[] gamedirectory = new byte[MAX_OSPATH]; // Name of game directory (com_gamedir) 51 | public float playback_time; // Time of track 52 | public int playback_ticks; // # of ticks in track 53 | public int playback_frames; // # of frames in track 54 | public int signonlength; // length of sigondata in bytes 55 | } 56 | 57 | public static class democmdheader_t extends BufferStruct { 58 | public byte cmd; 59 | public int tick; 60 | public byte playerSlot; 61 | } 62 | 63 | public static class democmdinfo_t extends BufferStruct { 64 | public int flags; 65 | 66 | // original origin/viewangles 67 | public float[] viewOrigin = new float[3]; 68 | public float[] viewAngles = new float[3]; 69 | public float[] localViewAngles = new float[3]; 70 | 71 | // Resampled origin/viewangles 72 | public float[] viewOrigin2 = new float[3]; 73 | public float[] viewAngles2 = new float[3]; 74 | public float[] localViewAngles2 = new float[3]; 75 | 76 | public void init() { 77 | flags = FDEMO_NORMAL; 78 | } 79 | 80 | public float[] GetViewOrigin() { 81 | if ((flags & FDEMO_USE_ORIGIN2) > 0) 82 | return viewOrigin2; 83 | return viewOrigin; 84 | } 85 | 86 | public float[] GetViewAngles() { 87 | if ((flags & FDEMO_USE_ANGLES2) > 0) 88 | return viewAngles2; 89 | return viewAngles; 90 | } 91 | 92 | public float[] GetLocalViewAngles() { 93 | if ((flags & FDEMO_USE_ANGLES2) > 0) 94 | return localViewAngles2; 95 | return localViewAngles; 96 | } 97 | 98 | public void reset() { 99 | flags = 0; 100 | viewOrigin2 = viewOrigin; 101 | viewAngles2 = viewAngles; 102 | localViewAngles2 = localViewAngles; 103 | } 104 | } 105 | 106 | public enum NET_Messages { 107 | net_NOP, 108 | net_Disconnect, 109 | net_File, 110 | net_SplitScreenUser, 111 | net_Tick, 112 | net_StringCmd, 113 | net_SetConVar, 114 | net_SignonState 115 | } 116 | 117 | public enum SVC_Messages { 118 | _0, 119 | _1, 120 | _2, 121 | _3, 122 | _4, 123 | _5, 124 | _6, 125 | _7, 126 | svc_ServerInfo, 127 | svc_SendTable, 128 | svc_ClassInfo, 129 | svc_SetPause, 130 | svc_CreateStringTable, 131 | svc_UpdateStringTable, 132 | svc_VoiceInit, 133 | svc_VoiceData, 134 | svc_Print, 135 | svc_Sounds, 136 | svc_SetView, 137 | svc_FixAngle, 138 | svc_CrosshairAngle, 139 | svc_BSPDecal, 140 | svc_SplitScreen, 141 | svc_UserMessage, 142 | svc_EntityMessage, 143 | svc_GameEvent, 144 | svc_PacketEntities, 145 | svc_TempEntities, 146 | svc_Prefetch, 147 | svc_Menu, 148 | svc_GameEventList, 149 | svc_GetCvarValue, 150 | svc_PaintmapData, 151 | svc_CmdKeyValues, 152 | svc_EncryptedData 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/sdk/ObsMode.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.sdk; 2 | 3 | public enum ObsMode { 4 | OBS_MODE_NONE, // not in spectator mode 5 | OBS_MODE_DEATHCAM, // special mode for death cam animation 6 | OBS_MODE_FREEZECAM, // zooms to a target, and freeze-frames on them 7 | OBS_MODE_FIXED, // view from a fixed camera position 8 | OBS_MODE_IN_EYE, // follow a player in first person view 9 | OBS_MODE_CHASE, // follow a player in third person view 10 | OBS_MODE_POI, // PASSTIME point of interest - game objective, big fight, anything interesting; added in the middle of the enum due to tons of hard-coded " 0 && (m_nSplitScreenSlot.get().getInt() == -1 || m_nSplitScreenSlot.get().getInt() == nSlot) && (m_bRenderWhenOccluded.get().get() > 0 || m_bRenderWhenUnoccluded.get().get() > 0); 42 | } 43 | 44 | boolean IsUnused() { 45 | return m_nNextFreeSlot.get().getInt() != ENTRY_IN_USE; 46 | } 47 | 48 | public long writeStart() { 49 | return m_flGlowRed.offset(); 50 | } 51 | 52 | public long writeEnd() { 53 | return unk2.offset(); 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/Matrix3x4Mem.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class Matrix3x4Mem extends MemStruct { 4 | public final StructField f00 = new StructField(this, Float.BYTES); 5 | public final StructField f01 = new StructField(this, Float.BYTES); 6 | public final StructField f02 = new StructField(this, Float.BYTES); 7 | public final StructField f03 = new StructField(this, Float.BYTES); 8 | 9 | public final StructField f10 = new StructField(this, Float.BYTES); 10 | public final StructField f11 = new StructField(this, Float.BYTES); 11 | public final StructField f12 = new StructField(this, Float.BYTES); 12 | public final StructField f13 = new StructField(this, Float.BYTES); 13 | 14 | public final StructField f20 = new StructField(this, Float.BYTES); 15 | public final StructField f21 = new StructField(this, Float.BYTES); 16 | public final StructField f22 = new StructField(this, Float.BYTES); 17 | public final StructField f23 = new StructField(this, Float.BYTES); 18 | 19 | public Matrix3x4Mem(MemStruct parent) { 20 | super(parent); 21 | } 22 | 23 | public Matrix3x4Mem() { 24 | super(); 25 | } 26 | 27 | public float[][] getMatrix() { 28 | float[][] matrix = new float[3][4]; 29 | matrix[0][0] = f00.getFloat(); 30 | matrix[0][1] = f01.getFloat(); 31 | matrix[0][2] = f02.getFloat(); 32 | matrix[0][3] = f03.getFloat(); 33 | matrix[1][0] = f10.getFloat(); 34 | matrix[1][1] = f11.getFloat(); 35 | matrix[1][2] = f12.getFloat(); 36 | matrix[1][3] = f13.getFloat(); 37 | matrix[2][0] = f20.getFloat(); 38 | matrix[2][1] = f21.getFloat(); 39 | matrix[2][2] = f22.getFloat(); 40 | matrix[2][3] = f23.getFloat(); 41 | return matrix; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/Matrix4x4Mem.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class Matrix4x4Mem extends MemStruct { 4 | public final StructField f00 = new StructField(this, Float.BYTES); 5 | public final StructField f01 = new StructField(this, Float.BYTES); 6 | public final StructField f02 = new StructField(this, Float.BYTES); 7 | public final StructField f03 = new StructField(this, Float.BYTES); 8 | 9 | public final StructField f10 = new StructField(this, Float.BYTES); 10 | public final StructField f11 = new StructField(this, Float.BYTES); 11 | public final StructField f12 = new StructField(this, Float.BYTES); 12 | public final StructField f13 = new StructField(this, Float.BYTES); 13 | 14 | public final StructField f20 = new StructField(this, Float.BYTES); 15 | public final StructField f21 = new StructField(this, Float.BYTES); 16 | public final StructField f22 = new StructField(this, Float.BYTES); 17 | public final StructField f23 = new StructField(this, Float.BYTES); 18 | 19 | public final StructField f30 = new StructField(this, Float.BYTES); 20 | public final StructField f31 = new StructField(this, Float.BYTES); 21 | public final StructField f32 = new StructField(this, Float.BYTES); 22 | public final StructField f33 = new StructField(this, Float.BYTES); 23 | 24 | public Matrix4x4Mem(MemStruct parent) { 25 | super(parent); 26 | } 27 | 28 | public Matrix4x4Mem() { 29 | super(); 30 | } 31 | 32 | public float[][] getMatrix() { 33 | float[][] matrix = new float[4][4]; 34 | matrix[0][0] = f00.getFloat(); 35 | matrix[0][1] = f01.getFloat(); 36 | matrix[0][2] = f02.getFloat(); 37 | matrix[0][3] = f03.getFloat(); 38 | matrix[1][0] = f10.getFloat(); 39 | matrix[1][1] = f11.getFloat(); 40 | matrix[1][2] = f12.getFloat(); 41 | matrix[1][3] = f13.getFloat(); 42 | matrix[2][0] = f20.getFloat(); 43 | matrix[2][1] = f21.getFloat(); 44 | matrix[2][2] = f22.getFloat(); 45 | matrix[2][3] = f23.getFloat(); 46 | matrix[3][0] = f20.getFloat(); 47 | matrix[3][1] = f21.getFloat(); 48 | matrix[3][2] = f22.getFloat(); 49 | matrix[3][3] = f23.getFloat(); 50 | return matrix; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/MemStruct.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | public class MemStruct { 6 | 7 | public long OFFSET = 0; 8 | public int SIZE = 0; 9 | public MemoryBuffer membuf; 10 | MemStruct parent; 11 | 12 | public MemStruct(MemoryBuffer membuf, long offset) { 13 | this.membuf = membuf; 14 | this.OFFSET = offset; 15 | } 16 | 17 | public MemStruct(MemoryBuffer membuf, int offset) { 18 | this.membuf = membuf; 19 | this.OFFSET = offset; 20 | } 21 | 22 | public MemStruct(MemoryBuffer membuf) { 23 | this.membuf = membuf; 24 | } 25 | 26 | public MemStruct(MemStruct parent) { 27 | this.parent = parent; 28 | this.OFFSET = parent.OFFSET + parent.SIZE; 29 | } 30 | 31 | public MemStruct(long offset) { 32 | this.OFFSET = offset; 33 | } 34 | 35 | public MemStruct(int offset) { 36 | this.OFFSET = offset; 37 | } 38 | 39 | public MemStruct() { 40 | } 41 | 42 | public void setSource(MemoryBuffer membuf) { 43 | this.membuf = membuf; 44 | this.OFFSET = 0; 45 | } 46 | 47 | public void setSource(MemoryBuffer membuf, int offset) { 48 | this.membuf = membuf; 49 | this.OFFSET = offset; 50 | } 51 | 52 | public long off() { 53 | return this.OFFSET; 54 | } 55 | 56 | public int size() { 57 | return SIZE; 58 | } 59 | 60 | public void enlarge(int size) { 61 | this.SIZE += size; 62 | if (parent != null) 63 | parent.enlarge(size); 64 | } 65 | 66 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/Mstudiobone_t.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class Mstudiobone_t extends MemStruct { 4 | 5 | // https://github.com/AimTuxOfficial/AimTux/blob/3d529e8c0a130527d5b963d35eb81e16853883ba/src/SDK/IVModelInfo.h#L100 6 | public final StructField sznameindex = new StructField(this, Integer.BYTES); 7 | public final StructField parent = new StructField(this, Integer.BYTES); // parent bone 8 | public final StructField bonecontroller = new StructField(this, 6 * Integer.BYTES); // bone controller index, -1 == none 9 | 10 | // default values 11 | public final MemStruct pos = new VectorMem(this); 12 | public final MemStruct quat = new QuaternionMem(this); 13 | public final MemStruct rot = new VectorMem(this); // RadianEuler 14 | // compression scale 15 | public final MemStruct posscale = new VectorMem(this); 16 | public final MemStruct rotscale = new VectorMem(this); 17 | 18 | public final MemStruct poseToBone = new Matrix3x4Mem(this); 19 | public final MemStruct qAlignment = new QuaternionMem(this); 20 | public final StructField flags = new StructField(this, Integer.BYTES); 21 | public final StructField proctype = new StructField(this, Integer.BYTES); 22 | public final StructField procindex = new StructField(this, Integer.BYTES); // procedural rule 23 | public final StructField physicsbone = new StructField(this, Integer.BYTES); // index into physically simulated bone 24 | 25 | public final StructField surfacepropidx = new StructField(this, Integer.BYTES); // index into string tablefor property name 26 | public final StructField contents = new StructField(this, Integer.BYTES); // See BSPFlags.h for the contents flags 27 | public final StructField surfacepropLookup = new StructField(this, Integer.BYTES); // this index must be cached by the loader, not saved in the file 28 | 29 | public final StructField unused = new StructField(this, 28); 30 | 31 | // > sizeof() = D8 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/Mstudioseqdesc_t.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.util.BufferStruct; 6 | 7 | public class Mstudioseqdesc_t extends BufferStruct { 8 | public int baseptr; 9 | 10 | // studiohdr_t* 11 | public long pStudiohdr() { 12 | return this.lastRead() + baseptr; 13 | } 14 | 15 | public int szlabelindex; 16 | 17 | // char* 18 | public long pszLabel() { 19 | return this.lastRead() + szlabelindex; 20 | } 21 | 22 | public int szactivitynameindex; 23 | 24 | // char* 25 | public long pszActivityName() { 26 | return this.lastRead() + szactivitynameindex; 27 | } 28 | 29 | public int flags; // looping/non-looping flags 30 | 31 | public int activity; // initialized at loadtime to game DLL values 32 | public int actweight; 33 | 34 | public int numevents; 35 | public int eventindex; 36 | 37 | // mstudioevent_t* 38 | public long pEvent(int i) { 39 | //Assert( i >= 0 && i < numevents); 40 | return this.lastRead() + eventindex + i; 41 | } 42 | 43 | float[] bbmin = new float[3]; // per sequence bounding box 44 | float[] bbmax = new float[3]; 45 | 46 | public int numblends; 47 | 48 | // Index into array of shorts which is groupsize[0] x groupsize[1] in length 49 | public int animindexindex; 50 | 51 | public int anim(int x, int y) { 52 | if (x >= groupsize[0]) { 53 | x = groupsize[0] - 1; 54 | } 55 | 56 | if (y >= groupsize[1]) { 57 | y = groupsize[1] - 1; 58 | } 59 | 60 | int offset = y * groupsize[0] + x; 61 | // short* 62 | long blends = this.lastRead() + animindexindex; 63 | // int value = (int)blends[offset]; 64 | int value = ((MemoryBuffer) this.source())._lastreadsrc.readShort(blends + offset * Short.BYTES); 65 | return value; 66 | } 67 | 68 | public int movementindex; // [blend] float array for blended movement 69 | public int[] groupsize = new int[2]; 70 | public int[] paramindex = new int[2]; // X, Y, Z, XR, YR, ZR 71 | public float[] paramstart = new float[2]; // local (0..1) starting value 72 | public float[] paramend = new float[2]; // local (0..1) ending value 73 | public int paramparent; 74 | 75 | public float fadeintime; // ideal cross fate in time (0.2 default) 76 | public float fadeouttime; // ideal cross fade out time (0.2 default) 77 | 78 | public int localentrynode; // transition node at entry 79 | public int localexitnode; // transition node at exit 80 | public int nodeflags; // transition rules 81 | 82 | public float entryphase; // used to match entry gait 83 | public float exitphase; // used to match exit gait 84 | 85 | public float lastframe; // frame that should generation EndOfSequence 86 | 87 | public int nextseq; // auto advancing sequences 88 | public int pose; // index of delta animation between end and nextseq 89 | 90 | public int numikrules; 91 | 92 | public int numautolayers; // 93 | public int autolayerindex; 94 | 95 | // mstudioautolayer_t* 96 | public long pAutolayer(int i) { 97 | //Assert( i >= 0 && i < numautolayers); 98 | return (this.lastRead() + autolayerindex) + i; 99 | }; 100 | 101 | public int weightlistindex; 102 | 103 | // float * 104 | public long pBoneweight(int i) { 105 | return this.lastRead() + weightlistindex + i; 106 | }; 107 | 108 | public float weight(int i) { 109 | return ((MemoryBuffer) this.source())._lastreadsrc.readFloat(pBoneweight(i)); 110 | }; 111 | 112 | // FIXME: make this 2D instead of 2x1D arrays 113 | public int posekeyindex; 114 | 115 | // float* 116 | public long pPoseKey(int iParam, int iAnim) { 117 | return this.lastRead() + posekeyindex + iParam * groupsize[0] + iAnim; 118 | } 119 | 120 | public float poseKey(int iParam, int iAnim) { 121 | return ((MemoryBuffer) this.source())._lastreadsrc.readFloat(pPoseKey(iParam, iAnim)); 122 | } 123 | 124 | public int numiklocks; 125 | public int iklockindex; 126 | 127 | // mstudioiklock_t * 128 | public long pIKLock(int i) { 129 | //Assert( i >= 0 && i < numiklocks); 130 | return this.lastRead() + iklockindex + i; 131 | }; 132 | 133 | // Key values 134 | public int keyvalueindex; 135 | public int keyvaluesize; 136 | 137 | // char* 138 | public long KeyValueText() { 139 | return keyvaluesize != 0 ? this.lastRead() + keyvalueindex : 0; 140 | } 141 | 142 | public int cycleposeindex; // index of pose parameter to use as cycle index 143 | 144 | public int activitymodifierindex; 145 | public int numactivitymodifiers; 146 | 147 | // mstudioactivitymodifier_t* 148 | public long pActivityModifier(int i) { 149 | //Assert( i >= 0 && i < numactivitymodifiers); 150 | return activitymodifierindex != 0 ? this.lastRead() + activitymodifierindex + i : 0; 151 | }; 152 | 153 | public int[] unused = new int[5]; // remove/add as appropriate (grow back to 8 ints on version change!) 154 | 155 | public long pSeqdesc(int i) { 156 | return 0; 157 | } 158 | 159 | } 160 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/PlayerInfo.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import me.lixko.csgoexternals.sdk.Const; 4 | import me.lixko.csgoexternals.util.BufferStruct; 5 | 6 | public class PlayerInfo extends BufferStruct { 7 | public long unknown; 8 | public long xuid; // network xuid 9 | @StringLength(size = Const.MAX_PLAYER_NAME_LENGTH) 10 | public String name; // scoreboard information 11 | public int userID; // local server user ID, unique while server is running 12 | @StringLength(size = Const.SIGNED_GUID_LEN + 1) 13 | public String guid; // global unique player identifer 14 | @UnsignedField(4) 15 | public long friendsID; // friends identification number 16 | @StringLength(size = Const.MAX_PLAYER_NAME_LENGTH) 17 | public String friendsName; // friends name 18 | public boolean fakeplayer; // true, if player is a bot controlled by game.dll 19 | public boolean ishltv; // true if player is the HLTV proxy 20 | // public boolean isreplay; // // true if player is the Replay proxy 21 | public long[] customFiles = new long[Const.MAX_CUSTOM_FILES]; // CRC32_t 22 | @UnsignedField(1) 23 | public int filesDownloaded; 24 | } 25 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/QAngle.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class QAngle extends MemStruct { 4 | 5 | public final StructField x = new StructField(this, Float.BYTES); 6 | public final StructField y = new StructField(this, Float.BYTES); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/QuaternionMem.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class QuaternionMem extends MemStruct { 4 | 5 | public final StructField x = new StructField(this, Float.BYTES); 6 | public final StructField y = new StructField(this, Float.BYTES); 7 | public final StructField z = new StructField(this, Float.BYTES); 8 | public final StructField w = new StructField(this, Float.BYTES); 9 | 10 | public QuaternionMem(MemStruct parent) { 11 | super(parent); 12 | } 13 | 14 | public QuaternionMem() { 15 | super(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/RecvProp.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import me.lixko.csgoexternals.util.BufferStruct; 4 | 5 | public class RecvProp extends BufferStruct { 6 | public long m_pVarName; // char * 7 | public int m_RecvType; 8 | public int m_Flags; 9 | public int m_StringBufferSize; 10 | public boolean m_bInsideArray; 11 | public byte[] pad0 = new byte[3]; 12 | public long m_pExtraData; // const void * 13 | public long m_pArrayProp; // RecvProp * 14 | public long m_ArrayLengthProxy; // (*ArrayLengthRecvProxyFn)( void *pStruct, int objectID, int currentArrayLength ) 15 | public long m_ProxyFn; // (*RecvVarProxyFn)( const CRecvProxyData *pData, void *pStruct, void *pOut ) 16 | public long m_DataTableProxyFn; // (*DataTableRecvVarProxyFn)(const RecvProp *pProp, void **pOut, void *pData, int objectID) 17 | public long m_pDataTable; // RecvTable * 18 | public int m_Offset; 19 | public int m_ElementStride; 20 | public int m_nElements; 21 | public byte[] pad1 = new byte[4]; 22 | public long m_pParentArrayPropName; // const char * 23 | // 0x59 24 | // 0x3C on 32b 25 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/RecvPropB.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class RecvPropB extends MemStruct { 4 | public final StructField m_pVarName = new StructField(this, Long.BYTES); 5 | 6 | public final StructField m_RecvType = new StructField(this, Integer.BYTES); 7 | public final StructField m_Flags = new StructField(this, Integer.BYTES); 8 | public final StructField m_StringBufferSize = new StructField(this, Integer.BYTES); 9 | 10 | public final StructField m_bInsideArray = new StructField(this, 4); // 4 cuz padding 11 | 12 | public final StructField m_pExtraData = new StructField(this, Long.BYTES); 13 | public final StructField m_pArrayProp = new StructField(this, Long.BYTES); 14 | public final StructField m_ArrayLengthProxy = new StructField(this, Long.BYTES); 15 | public final StructField m_ProxyFn = new StructField(this, Long.BYTES); 16 | public final StructField m_DataTableProxyFn = new StructField(this, Long.BYTES); 17 | public final StructField m_pDataTable = new StructField(this, Long.BYTES); 18 | 19 | public final StructField m_Offset = new StructField(this, Integer.BYTES); 20 | public final StructField m_ElementStride = new StructField(this, Integer.BYTES); 21 | public final StructField m_nElements = new StructField(this, Integer.BYTES); 22 | 23 | public final StructField pad0 = new StructField(this, Integer.BYTES); 24 | 25 | public final StructField m_pParentArrayPropName = new StructField(this, Long.BYTES); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/RecvTable.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import me.lixko.csgoexternals.util.BufferStruct; 4 | 5 | public class RecvTable extends BufferStruct { 6 | public long m_pProps; // RecvProp* 7 | public int m_nProps; 8 | public int pad0; 9 | public long m_pDecoder; // void* 10 | public long m_pNetTableName; // char* 11 | public boolean m_bInitialized; 12 | public boolean m_bInMainList; 13 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/RecvTableB.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class RecvTableB extends MemStruct { 4 | public final StructField m_pProps = new StructField(this, Long.BYTES); 5 | public final StructField m_nProps = new StructField(this, Integer.BYTES); 6 | public final StructField m_pDecoder = new StructField(this, Long.BYTES); 7 | public final StructField m_pNetTableName = new StructField(this, Long.BYTES); 8 | public final StructField m_bInitialized = new StructField(this, 1); 9 | public final StructField m_bInMainList = new StructField(this, 1); 10 | } 11 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/Studiohdr_t.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | public class Studiohdr_t extends MemStruct { 4 | 5 | // https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/public/bone_setup.cpp#L1537 6 | public final StructField id = new StructField(this, Integer.BYTES); 7 | public final StructField version = new StructField(this, Integer.BYTES); 8 | public final StructField checksum = new StructField(this, Integer.BYTES); 9 | public final StructField name = new StructField(this, 64); 10 | public final StructField length = new StructField(this, Integer.BYTES); 11 | 12 | public final MemStruct eyeposition = new VectorMem(this); 13 | public final MemStruct illumposition = new VectorMem(this); 14 | public final MemStruct hull_min = new VectorMem(this); 15 | public final MemStruct hull_max = new VectorMem(this); 16 | public final MemStruct view_bbmin = new VectorMem(this); 17 | public final MemStruct view_bbmax = new VectorMem(this); 18 | 19 | public final StructField flags = new StructField(this, Integer.BYTES); 20 | public final StructField numbones = new StructField(this, Integer.BYTES); 21 | public final StructField boneindex = new StructField(this, Integer.BYTES); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/VectorMem.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | public class VectorMem extends MemStruct { 6 | 7 | public final StructField x = new StructField(this, Float.BYTES); 8 | public final StructField y = new StructField(this, Float.BYTES); 9 | public final StructField z = new StructField(this, Float.BYTES); 10 | 11 | public VectorMem(MemStruct parent) { 12 | super(parent); 13 | } 14 | 15 | public VectorMem() { 16 | super(); 17 | } 18 | 19 | public VectorMem(MemoryBuffer buf) { 20 | super(buf); 21 | } 22 | 23 | public float[] getVector() { 24 | return new float[] { x.getFloat(), y.getFloat(), z.getFloat() }; 25 | } 26 | 27 | public float[] copyTo(float[] arr) { 28 | arr[0] = x.getFloat(); 29 | arr[1] = y.getFloat(); 30 | arr[2] = z.getFloat(); 31 | return arr; 32 | } 33 | 34 | public VectorMem readFrom(float[] arr) { 35 | x.set(arr[0]); 36 | y.set(arr[1]); 37 | z.set(arr[2]); 38 | return this; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/structs/user_regs_struct.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.structs; 2 | 3 | import me.lixko.csgoexternals.util.StringFormat; 4 | 5 | public class user_regs_struct extends MemStruct { 6 | 7 | // /usr/include/sys/user.h 8 | 9 | public final StructField r15 = new StructField(this, Long.BYTES); 10 | public final StructField r14 = new StructField(this, Long.BYTES); 11 | public final StructField r13 = new StructField(this, Long.BYTES); 12 | public final StructField r12 = new StructField(this, Long.BYTES); 13 | public final StructField rbp = new StructField(this, Long.BYTES); 14 | public final StructField rbx = new StructField(this, Long.BYTES); 15 | public final StructField r11 = new StructField(this, Long.BYTES); 16 | public final StructField r10 = new StructField(this, Long.BYTES); 17 | public final StructField r9 = new StructField(this, Long.BYTES); 18 | public final StructField r8 = new StructField(this, Long.BYTES); 19 | public final StructField rax = new StructField(this, Long.BYTES); 20 | public final StructField rcx = new StructField(this, Long.BYTES); 21 | public final StructField rdx = new StructField(this, Long.BYTES); 22 | public final StructField rsi = new StructField(this, Long.BYTES); 23 | public final StructField rdi = new StructField(this, Long.BYTES); 24 | public final StructField orig_rax = new StructField(this, Long.BYTES); 25 | public final StructField rip = new StructField(this, Long.BYTES); 26 | public final StructField cs = new StructField(this, Long.BYTES); 27 | public final StructField eflags = new StructField(this, Long.BYTES); 28 | public final StructField rsp = new StructField(this, Long.BYTES); 29 | public final StructField ss = new StructField(this, Long.BYTES); 30 | public final StructField fs_base = new StructField(this, Long.BYTES); 31 | public final StructField gs_base = new StructField(this, Long.BYTES); 32 | public final StructField ds = new StructField(this, Long.BYTES); 33 | public final StructField es = new StructField(this, Long.BYTES); 34 | public final StructField fs = new StructField(this, Long.BYTES); 35 | public final StructField gs = new StructField(this, Long.BYTES); 36 | 37 | @Override 38 | public String toString() { 39 | return "user_regs_struct [" + "r15=" + r15.getLong() + ", r14=" + r14.getLong() + ", r13=" + r13.getLong() + ", r12=" + r12.getLong() + ", r11=" + r11.getLong() + ", r10=" + r10.getLong() + ", r9=" + r9.getLong() + ", r8=" + r8.getLong() + ", \nrbp=" + StringFormat.hex(rbp.getLong()) + ", rax=" + StringFormat.hex(rax.getLong()) + ", rbx=" + StringFormat.hex(rbx.getLong()) + ", rcx=" + StringFormat.hex(rcx.getLong()) + ", rdx=" + StringFormat.hex(rdx.getLong()) + ", rsi=" + StringFormat.hex(rsi.getLong()) + ", rdi=" + StringFormat.hex(rdi.getLong()) + ", \norig_rax=" + orig_rax.getLong() + ", rip=" + StringFormat.hex(rip.getLong()) + ", cs=" + cs.getLong() + ", eflags=" + eflags.getLong() + ", rsp=" + rsp.getLong() + ", ss=" + ss.getLong() + ", fs_base=" + fs_base.getLong() + ", gs_base=" + gs_base.getLong() + ", ds=" + ds.getLong() + ", es=" + es.getLong() + ", fs=" + fs.getLong() + ", gs=" + gs.getLong() + " ]"; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/themes/BasicTheme.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.themes; 2 | 3 | import me.lixko.csgoexternals.util.ChatColor; 4 | 5 | public class BasicTheme { 6 | // ==================== COLORS ==================== // 7 | public static final int stringBackgroundColor = 0x000000C0; 8 | public static final int textColor = 0x00FFFFFF; 9 | 10 | // ================== DIMENSIONS ================== // 11 | public static final int[] stringBackgroundPadding = new int[] { 2 }; 12 | 13 | public static final String smallFontName = "Verdana"; 14 | public static final int smallFontSize = 10; 15 | public static final ChatColor smallFontStyle = ChatColor.BOLD; 16 | 17 | public static final String normalFontName = "Verdana"; 18 | public static final int normalFontSize = 13; 19 | public static final ChatColor normalFontStyle = ChatColor.BOLD; 20 | 21 | public static final String largeFontName = "Verdana"; 22 | public static final int largeFontSize = 18; 23 | public static final ChatColor largeFontStyle = ChatColor.BOLD; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/ChatColor.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.util.HashMap; 4 | 5 | public enum ChatColor { 6 | BLACK('0', 0x000000FF), 7 | DARK_BLUE('1', 0x0000AAFF), 8 | DARK_GREEN('2', 0x00AA00FF), 9 | DARK_AQUA('3', 0x00AAAAFF), 10 | DARK_RED('4', 0xAA0000FF), 11 | DARK_PURPLE('5', 0xAA00AAFF), 12 | GOLD('6', 0xFFAA00FF), 13 | GRAY('7', 0xAAAAAAFF), 14 | DARK_GRAY('8', 0x555555FF), 15 | BLUE('9', 0x5555FFFF), 16 | GREEN('a', 0x55FF55FF), 17 | AQUA('b', 0x55FFFFFF), 18 | RED('c', 0xFF5555FF), 19 | LIGHT_PURPLE('d', 0xFF55FFFF), 20 | YELLOW('e', 0xFFFF55FF), 21 | WHITE('f', 0xFFFFFFFF), 22 | CTCHAT('f', 0.878f, 0.686f, 0.337f, 1f), 23 | TCHAT('f', 0.54f, 0.72f, 1.0f, 1f), 24 | BOLD('l', -1), 25 | STRIKETHROUGH('m', -1), 26 | UNDERLINE('u', -1), 27 | PLAIN('n', -1), 28 | ITALIC('o', -1), 29 | SMALL('p', -1), 30 | MEDIUM('s', -1), 31 | LARGE('t', -1), 32 | RESET('r', -1); 33 | 34 | public char code; 35 | public float[] color = new float[4]; 36 | public static HashMap cmap = new HashMap(); 37 | public static char colorChar = '\247'; 38 | 39 | private ChatColor(char value, int color) { 40 | this.code = value; 41 | if (color == -1) { 42 | this.color = new float[] { -1, -1, -1, -1 }; 43 | return; 44 | } 45 | this.color[0] = (float) ((color >> 24) & 0xFF) / 255f; 46 | this.color[1] = (float) ((color >> 16) & 0xFF) / 255f; 47 | this.color[2] = (float) ((color >> 8) & 0xFF) / 255f; 48 | this.color[3] = (float) ((color >> 0) & 0xFF) / 255f; 49 | } 50 | 51 | private ChatColor(char value, float r, float g, float b, float a) { 52 | this.code = value; 53 | this.color[0] = r; 54 | this.color[1] = g; 55 | this.color[2] = b; 56 | this.color[3] = a; 57 | } 58 | 59 | static { 60 | for (ChatColor col : values()) { 61 | cmap.put((short) col.code, col); 62 | } 63 | } 64 | 65 | public static String stripColors(String str) { 66 | String res = ""; 67 | boolean wascolor = false; 68 | for (int i = 0; i < str.length(); ++i) { 69 | if (str.charAt(i) == colorChar) { 70 | if (wascolor) 71 | res += colorChar; 72 | else 73 | wascolor = true; 74 | } else if (wascolor) { 75 | wascolor = false; 76 | } else { 77 | res += str.charAt(i); 78 | } 79 | } 80 | return res; 81 | } 82 | 83 | public static ChatColor getChatColor(char code) { 84 | for (ChatColor e : ChatColor.values()) { 85 | if (e.code == code) 86 | return e; 87 | } 88 | return null; 89 | // return cmap.get(color); 90 | } 91 | 92 | public String toString() { 93 | return ChatColor.colorChar + "" + this.code; 94 | } 95 | 96 | public float[] getColor() { 97 | if (this == ChatColor.RESET) 98 | return convertColor(DrawUtils.theme.textColor); 99 | return this.color; 100 | } 101 | 102 | public static float[] convertColor(int color) { 103 | return new float[] { ((color >> 24) & 0xFF) / 255f, ((color >> 16) & 0xFF) / 255f, ((color >> 8) & 0xFF) / 255f, ((color >> 0) & 0xFF) / 255f }; 104 | } 105 | 106 | public static float[] convertColor(float[] color) { 107 | return color; 108 | } 109 | 110 | } 111 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/FileUtil.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.File; 6 | import java.io.FileNotFoundException; 7 | import java.io.FileOutputStream; 8 | import java.io.FileReader; 9 | import java.io.FileWriter; 10 | import java.io.IOException; 11 | import java.io.OutputStreamWriter; 12 | import java.io.PrintWriter; 13 | import java.io.Writer; 14 | import java.util.HashMap; 15 | 16 | import com.google.gson.Gson; 17 | import com.google.gson.JsonElement; 18 | import com.google.gson.JsonParseException; 19 | import com.google.gson.JsonParser; 20 | 21 | public class FileUtil { 22 | 23 | public static String mainpath = cutDirectory(me.lixko.csgoexternals.Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 24 | 25 | public static void writeConfig(HashMap map, String path) { 26 | File dir = new File(path); 27 | new File(dir.getParent()).mkdirs(); 28 | Gson gson = new Gson(); 29 | String json = gson.toJson(map); 30 | // System.out.println("JSON: " + json); 31 | writeToFile(json, new File(path)); 32 | } 33 | 34 | public static void writeToFile(String content, File file) { 35 | try { 36 | Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); 37 | writer.write(content); 38 | writer.close(); 39 | } catch (IOException ex) { 40 | ex.printStackTrace(); 41 | } 42 | } 43 | 44 | public static String readFile(String file) { 45 | String data = ""; 46 | 47 | try { 48 | BufferedReader br = new BufferedReader(new FileReader(file)); 49 | StringBuilder sb = new StringBuilder(); 50 | String line = br.readLine(); 51 | 52 | while (line != null) { 53 | sb.append(line); 54 | sb.append(System.lineSeparator()); 55 | line = br.readLine(); 56 | } 57 | 58 | data = sb.toString(); 59 | br.close(); 60 | } catch (FileNotFoundException e) { 61 | e.printStackTrace(); 62 | } catch (IOException e) { 63 | e.printStackTrace(); 64 | } 65 | 66 | return data; 67 | } 68 | 69 | public JsonElement decodeJson(String jsonText) { 70 | JsonParser parser = new JsonParser(); 71 | 72 | try { 73 | return parser.parse(jsonText); 74 | } catch (JsonParseException pe) { 75 | System.out.println("Error on: " + pe.getMessage()); 76 | System.out.println(pe); 77 | } 78 | 79 | return null; 80 | } 81 | 82 | public static String formatPath(String s) { 83 | // String path = Minecraft.getMinecraft().mcDataDir.getAbsolutePath() + 84 | // File.separator + Client.theClient.configManager.folderName + (s != 85 | // ""? (File.separator + s) : ""); 86 | String path = mainpath + "/" + (s != "" ? (File.separator + s) : ""); 87 | // System.out.println(path); 88 | path.replace("/", File.separator); 89 | path.replace("//", File.separator); 90 | path.replace("\\", File.separator); 91 | return path; 92 | } 93 | 94 | public static String formatPath() { 95 | return formatPath(""); 96 | } 97 | 98 | public static void appendToFile(String content, File file) { 99 | PrintWriter out = null; 100 | 101 | try { 102 | out = new PrintWriter(new BufferedWriter(new FileWriter(file, true))); 103 | out.println(content); 104 | } catch (Exception e) { 105 | e.printStackTrace(); 106 | } finally { 107 | if (out != null) { 108 | out.close(); 109 | } 110 | } 111 | } 112 | 113 | private static String cutDirectory(String path) { 114 | return path.substring(0, path.lastIndexOf(File.separator)); 115 | } 116 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/FontRenderer.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.awt.font.LineMetrics; 4 | 5 | import com.jogamp.opengl.util.awt.TextRenderer; 6 | 7 | public class FontRenderer { 8 | 9 | public TextRenderer textRenderer; 10 | private float[] charWidth = new float[Character.MAX_VALUE]; 11 | private float[] charHeight = new float[Character.MAX_VALUE]; 12 | private float[] charDescender = new float[Character.MAX_VALUE]; 13 | 14 | public FontRenderer(TextRenderer textRenderer) { 15 | this.textRenderer = textRenderer; 16 | this.textRenderer.setSmoothing(true); 17 | } 18 | 19 | public float getStringWidth(String str) { 20 | char chari; 21 | float strw = 0; 22 | for (int i = 0; i < str.length(); i++) { 23 | chari = str.charAt(i); 24 | if (chari < 32) 25 | continue; 26 | if (charWidth[chari] == 0) { 27 | try { 28 | charWidth[chari] = textRenderer.getCharWidth(chari); 29 | } catch (Throwable e) { 30 | System.out.println("Can't find width of " + chari); 31 | } 32 | 33 | if (charWidth[chari] == 0) 34 | charWidth[chari] = -1; 35 | } 36 | strw += Math.max(0f, charWidth[chari]); 37 | } 38 | return strw; 39 | } 40 | 41 | public float getStringHeight(String str) { 42 | char chari; 43 | float strh = 0; 44 | for (int i = 0; i < str.length(); i++) { 45 | chari = str.charAt(i); 46 | 47 | if (charHeight[chari] == 0) { 48 | charHeight[chari] = textRenderer.getFont().getLineMetrics(String.valueOf(chari), textRenderer.getFontRenderContext()).getHeight(); 49 | if (charHeight[chari] == 0) 50 | charHeight[chari] = -1; 51 | 52 | } 53 | strh = Math.max(strh, charHeight[chari]); 54 | } 55 | return strh; 56 | } 57 | 58 | public float getStringMinDescend(String str) { 59 | char chari; 60 | float strh = 0; 61 | for (int i = 0; i < str.length(); i++) { 62 | chari = str.charAt(i); 63 | 64 | if (charDescender[chari] == 0) { 65 | charDescender[chari] = textRenderer.getFont().getLineMetrics(String.valueOf(chari), textRenderer.getFontRenderContext()).getDescent(); 66 | } 67 | strh = Math.max(strh, charDescender[chari]); 68 | } 69 | return strh; 70 | } 71 | 72 | public LineMetrics getLineMetrics(String str) { 73 | return textRenderer.getFont().getLineMetrics(str, textRenderer.getFontRenderContext()); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/GLTrace.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.nio.FloatBuffer; 4 | 5 | import com.jogamp.opengl.GL2; 6 | 7 | public class GLTrace { 8 | private GL2 gl; 9 | private int maxSamples; 10 | private FloatBuffer vertex_data; 11 | 12 | private float startX = 0f, startY = 0f, sizeX = 0f, sizeY = 0f, scaleX = 1f, scaleY = 1f; 13 | private float colorR = 1f, colorG = 0f, colorB = 0f, colorA = 1f, lineWidth = 1f; 14 | private float maxX = 0f, maxY = 0f; 15 | private int curSample = 0; 16 | private boolean shouldAutoscale = false; 17 | 18 | private long firstSampleTime; 19 | 20 | public GLTrace(GL2 gl, float startX, float startY, float sizeX, float sizeY, int samples) { 21 | this.startX = startX; 22 | this.sizeX = sizeX; 23 | this.startY = startY; 24 | this.sizeY = sizeY; 25 | this.maxSamples = samples; 26 | this.gl = gl; 27 | vertex_data = FloatBuffer.allocate(this.maxSamples * 2); 28 | } 29 | 30 | public void putSample(float x, float y) { 31 | vertex_data.position(curSample * 2); 32 | float[] sample = new float[] { startX + sizeX / 2 + x * scaleX, startY + sizeY / 2 + y * scaleY }; 33 | vertex_data.put(sample); 34 | 35 | if(curSample == 0) 36 | firstSampleTime = System.currentTimeMillis(); 37 | 38 | if (this.shouldAutoscale) { 39 | float absX = Math.abs(x), absY = Math.abs(y); 40 | if (absX * scaleX > sizeX / 2 || absY * scaleY > sizeY / 2) { 41 | float newScale = Math.max(absX / sizeX / 2, absY / sizeY / 2); 42 | scaleX = scaleY = newScale; 43 | System.out.println("scaling by " + newScale); 44 | } 45 | } 46 | 47 | curSample++; 48 | if(curSample == maxSamples) { 49 | vertex_data.position(0); 50 | curSample = 0; 51 | } 52 | } 53 | 54 | public void render() { 55 | DrawUtils.setLineWidth(1f); 56 | DrawUtils.setColor(0f, 0f, 0f, 0.8f); 57 | DrawUtils.fillRectanglew(startX, startY, sizeX, sizeY); 58 | 59 | DrawUtils.setColor(0.8f, 0.8f, 0.8f, 0.8f); 60 | DrawUtils.drawRectanglew(startX, startY, sizeX, sizeY); 61 | 62 | gl.glLineWidth(lineWidth); 63 | gl.glColor4f(colorR, colorG, colorB, colorA); 64 | 65 | gl.glBegin(GL2.GL_LINE_STRIP); 66 | for(int i = 0; i < curSample * 2; i += 2) { 67 | gl.glVertex2f(vertex_data.get(i), vertex_data.get(i + 1)); 68 | } 69 | gl.glEnd(); 70 | 71 | gl.glBegin(GL2.GL_LINE_STRIP); 72 | for(int i = curSample * 2; i < maxSamples * 2; i += 2) { 73 | gl.glVertex2f(vertex_data.get(i), vertex_data.get(i + 1)); 74 | } 75 | gl.glEnd(); 76 | } 77 | 78 | public void reset() { 79 | this.curSample = 0; 80 | if (this.shouldAutoscale) { 81 | this.scaleX = 1f; 82 | this.scaleY = 1f; 83 | } 84 | } 85 | 86 | public void empty() { 87 | for (int i = 0; i < vertex_data.capacity(); i++) 88 | vertex_data.put(i, 0f); 89 | vertex_data.clear(); 90 | this.reset(); 91 | } 92 | 93 | public void setColor(float r, float g, float b, float a) { 94 | this.colorR = r; 95 | this.colorG = g; 96 | this.colorB = b; 97 | this.colorA = a; 98 | } 99 | 100 | public void setLineWidth(float w) { 101 | this.lineWidth = w; 102 | } 103 | 104 | public int maxSamples() { 105 | return this.maxSamples; 106 | } 107 | 108 | public int currentSample() { 109 | return this.curSample; 110 | } 111 | 112 | public void setScaleX(float scaleX) { 113 | this.scaleX = scaleX; 114 | } 115 | 116 | public void setScaleY(float scaleY) { 117 | this.scaleY = scaleX; 118 | } 119 | 120 | public void setAutoscale(boolean autoscale) { 121 | this.shouldAutoscale = autoscale; 122 | } 123 | 124 | } 125 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/HttpDownloadUtility.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.io.File; 4 | import java.io.FileOutputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.net.HttpURLConnection; 8 | import java.net.URL; 9 | 10 | /** 11 | * A utility that downloads a file from a URL. 12 | * @author www.codejava.net 13 | * 14 | */ 15 | public class HttpDownloadUtility { 16 | private static final int BUFFER_SIZE = 4096; 17 | 18 | /** 19 | * Downloads a file from a URL 20 | * @param fileURL HTTP URL of the file to be downloaded 21 | * @param saveDir path of the directory to save the file 22 | * @throws IOException 23 | */ 24 | public static void downloadFile(String fileURL, String saveDir) 25 | throws IOException { 26 | URL url = new URL(fileURL); 27 | HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 28 | int responseCode = httpConn.getResponseCode(); 29 | 30 | // always check HTTP response code first 31 | if (responseCode == HttpURLConnection.HTTP_OK) { 32 | String fileName = ""; 33 | String disposition = httpConn.getHeaderField("Content-Disposition"); 34 | String contentType = httpConn.getContentType(); 35 | int contentLength = httpConn.getContentLength(); 36 | 37 | if (disposition != null) { 38 | // extracts file name from header field 39 | int index = disposition.indexOf("filename="); 40 | if (index > 0) { 41 | fileName = disposition.substring(index + 10, 42 | disposition.length() - 1); 43 | } 44 | } else { 45 | // extracts file name from URL 46 | fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, 47 | fileURL.length()); 48 | } 49 | 50 | System.out.println("Content-Type = " + contentType); 51 | System.out.println("Content-Disposition = " + disposition); 52 | System.out.println("Content-Length = " + contentLength); 53 | System.out.println("fileName = " + fileName); 54 | 55 | // opens input stream from the HTTP connection 56 | InputStream inputStream = httpConn.getInputStream(); 57 | String saveFilePath = saveDir + File.separator + fileName; 58 | 59 | // opens an output stream to save into file 60 | FileOutputStream outputStream = new FileOutputStream(saveFilePath); 61 | 62 | int bytesRead = -1; 63 | byte[] buffer = new byte[BUFFER_SIZE]; 64 | while ((bytesRead = inputStream.read(buffer)) != -1) { 65 | outputStream.write(buffer, 0, bytesRead); 66 | } 67 | 68 | outputStream.close(); 69 | inputStream.close(); 70 | 71 | } else { 72 | System.out.println("No file to download. Server replied HTTP code: " + responseCode); 73 | } 74 | httpConn.disconnect(); 75 | } 76 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/LocalPlayerPosition.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import com.github.jonatino.misc.MemoryBuffer; 4 | 5 | import me.lixko.csgoexternals.Engine; 6 | import me.lixko.csgoexternals.offsets.Netvars; 7 | import me.lixko.csgoexternals.offsets.Offsets; 8 | import me.lixko.csgoexternals.sdk.Const; 9 | import me.lixko.csgoexternals.structs.VectorMem; 10 | 11 | public class LocalPlayerPosition { 12 | public VectorMem lpvec = new VectorMem(); 13 | private MemoryBuffer lpvecbuf = new MemoryBuffer(lpvec.size()); 14 | private float pos[] = new float[3], viewoffset[] = new float[3], vieworigin[] = new float[3]; 15 | private float pitch, yaw, origyaw; 16 | public int fov, defaultfov; 17 | private float[] viewangles = new float[3], viewpunch = new float[3], aimpunch = new float[3]; 18 | 19 | MemoryBuffer engViewAnglesBuf = new MemoryBuffer(Float.BYTES * 3); 20 | VectorMem engViewAngles = new VectorMem(engViewAnglesBuf); 21 | 22 | public LocalPlayerPosition() { 23 | lpvec.setSource(lpvecbuf); 24 | } 25 | 26 | public void updateData() { 27 | long lpaddr = MemoryUtils.getLocalOrSpectated(); 28 | 29 | if (true) { 30 | Engine.clientModule().read(lpaddr + Netvars.CBaseEntity.m_vecOrigin, lpvec.size(), lpvecbuf); 31 | lpvec.copyTo(pos); 32 | 33 | Engine.clientModule().read(lpaddr + Netvars.CBasePlayer.localdata.m_Local.BASE_OFFSET + Netvars.CBasePlayer.localdata.m_Local.m_viewPunchAngle, lpvec.size(), lpvecbuf); 34 | lpvec.copyTo(viewpunch); 35 | 36 | Engine.clientModule().read(lpaddr + Netvars.CBasePlayer.localdata.m_Local.BASE_OFFSET + Netvars.CBasePlayer.localdata.m_Local.m_aimPunchAngle, lpvecbuf.size(), lpvecbuf); 37 | lpvec.copyTo(aimpunch); 38 | 39 | Engine.clientModule().read(lpaddr + Netvars.CBasePlayer.localdata.m_vecViewOffset_0, lpvec.size(), lpvecbuf); 40 | viewoffset = lpvec.getVector(); 41 | vieworigin = MathUtils.cadd(pos, viewoffset); 42 | 43 | Engine.clientModule().read(lpaddr + Netvars.CCSPlayer.m_angEyeAngles, lpvec.size(), lpvecbuf); 44 | //Engine.clientModule().read(Offsets.m_dwClientState + Offsets.m_vecViewAngles, lpvecbuf.size(), lpvecbuf); 45 | origyaw = lpvec.y.getFloat(); 46 | yaw = 90 - lpvec.y.getFloat(); 47 | pitch = lpvec.x.getFloat(); 48 | lpvec.copyTo(viewangles); 49 | } else if (false) { 50 | Engine.clientModule().read(Offsets.g_vecCurrentRenderOrigin, lpvec.size(), lpvecbuf); 51 | vieworigin = lpvec.getVector(); 52 | pos = vieworigin; 53 | 54 | Engine.clientModule().read(Offsets.g_vecCurrentRenderAngles, lpvecbuf.size(), lpvecbuf); 55 | yaw = 90 - lpvec.y.getFloat(); 56 | pitch = lpvec.x.getFloat(); 57 | } else { 58 | 59 | Engine.clientModule().read(Offsets.m_dwHLTVCamera + 24, lpvec.size(), lpvecbuf); 60 | vieworigin = lpvec.getVector(); 61 | pos = vieworigin; 62 | 63 | Engine.clientModule().read(Offsets.m_dwHLTVCamera + 52, lpvecbuf.size(), lpvecbuf); 64 | yaw = 90 - lpvec.y.getFloat(); 65 | pitch = lpvec.x.getFloat(); 66 | 67 | 68 | } 69 | } 70 | 71 | public void setEngineAngles(float[] va) { 72 | MathUtils.ClampAngle(va); 73 | this.engViewAngles.readFrom(va); 74 | Engine.engineModule().write(Offsets.m_dwClientState + Offsets.m_vecViewAngles, this.engViewAnglesBuf); 75 | } 76 | 77 | public float getX() { 78 | return this.pos[0]; 79 | } 80 | 81 | public float getY() { 82 | return this.pos[1]; 83 | } 84 | 85 | public float getZ() { 86 | return this.pos[2]; 87 | } 88 | 89 | public int getFOV() { 90 | if (fov == 0) 91 | return defaultfov; 92 | return fov; 93 | } 94 | 95 | public float[] getViewOrigin() { 96 | return this.vieworigin; 97 | } 98 | 99 | public float[] getViewOffset() { 100 | return this.viewoffset; 101 | } 102 | 103 | public float[] getOrigin() { 104 | return this.pos; 105 | } 106 | 107 | public float getPitch() { 108 | return this.pitch; 109 | } 110 | 111 | public float getYaw() { 112 | return this.yaw; 113 | } 114 | 115 | public float[] getViewAngles() { 116 | return this.viewangles; 117 | } 118 | 119 | public float[] getViewPunch() { 120 | return this.viewpunch; 121 | } 122 | 123 | public float[] getAimPunch() { 124 | return this.aimpunch; 125 | } 126 | 127 | } 128 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/MemoryUtils.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import me.lixko.csgoexternals.Engine; 4 | import me.lixko.csgoexternals.offsets.Netvars; 5 | import me.lixko.csgoexternals.offsets.Offsets; 6 | import me.lixko.csgoexternals.sdk.Const; 7 | 8 | public class MemoryUtils { 9 | 10 | public static String getEntityClassName(long entityaddr) { 11 | long vtable = Engine.clientModule().readLong(entityaddr + 8); 12 | if(vtable == 0) return ""; 13 | long fn = Engine.clientModule().readLong(vtable - 8); 14 | long cls = Engine.clientModule().readLong(fn + 8); 15 | String classname = Engine.clientModule().readString(cls, 64); 16 | // classname = classname.substring(0, classname.indexOf(' ')); 17 | return classname; 18 | } 19 | 20 | public static long getEntity(int idx) { 21 | if(idx > Engine.entlistbuffer.size() / Long.BYTES / 4) { 22 | if(Offsets.m_dwEntityList == 0) return 0; 23 | return Engine.clientModule().readLong(Offsets.m_dwEntityList + idx * Long.BYTES * 4); 24 | } 25 | return Engine.entlistbuffer.getLong(idx * Long.BYTES * 4); 26 | } 27 | 28 | public static int getPID() { 29 | String processName = java.lang.management.ManagementFactory.getRuntimeMXBean().getName(); 30 | return Integer.parseInt(processName.split("@")[0]); 31 | } 32 | 33 | public static long getLocalOrSpectated() { 34 | // isHLTV replay 35 | // https://www.unknowncheats.me/forum/2488163-post12.html 36 | if (false) { 37 | int iTarget1 = Engine.clientModule().readInt(Offsets.m_dwHLTVCamera + 64); 38 | if (iTarget1 != 0) { 39 | return MemoryUtils.getEntity(iTarget1); 40 | } 41 | } 42 | 43 | long entityptr = Offsets.m_dwLocalPlayer; 44 | int target = Engine.clientModule().readInt(Offsets.m_dwLocalPlayer + Netvars.CBasePlayer.m_hObserverTarget) & Const.ENT_ENTRY_MASK; 45 | 46 | // Engine.clientModule().read(Offsets.m_dwHLTVCamera + 52 47 | if (target != Const.ENT_ENTRY_MASK) { 48 | entityptr = MemoryUtils.getEntity(target); 49 | } 50 | 51 | return entityptr; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/MsgPriority.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | public enum MsgPriority { 4 | ALL(Integer.MAX_VALUE), 5 | TOGGLESTATUS(1000), 6 | CONFNOCHANGE(970), 7 | CONFCHANGE(950), 8 | MODULESGENERAL(750), 9 | MODULESWARNINGS(600), 10 | GENERAL(500), 11 | INFO(400), 12 | CLIENT(300), 13 | WARNINGS(200), 14 | SYNTAXERRORS(150), 15 | ERRORS(100), 16 | MODULESEXPLICIT(50), 17 | EXPLICIT(20), 18 | MUTE(0); 19 | 20 | public int value; 21 | 22 | private MsgPriority(int value) { 23 | this.value = value; 24 | } 25 | } -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/PID.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | public class PID { 4 | 5 | float kP, kI, kD; 6 | float prev_err, integral; 7 | float last_step; 8 | 9 | public PID(float kP, float kI, float kD) { 10 | this.kP = kP; 11 | this.kI = kI; 12 | this.kD = kD; 13 | } 14 | 15 | public float step(float err) { 16 | //System.out.println(err); 17 | float timeNow = System.currentTimeMillis() / 1000f; 18 | float dt = timeNow - last_step; 19 | if (dt > 0.1) dt = 0.1f; // cap dt at 0.1 second to avoid extremely big dt, which could cause the output to drift uncontrollably. 20 | 21 | last_step = timeNow; 22 | 23 | float derivative = err - prev_err; 24 | if (dt > 0.0001) { // prevent division by zero 25 | integral += err * dt; 26 | derivative /= dt; 27 | } 28 | 29 | float output = kP * err + kI * integral + kD * derivative; 30 | prev_err = err; 31 | 32 | return output; 33 | } 34 | 35 | public void clear() { 36 | prev_err = 0; 37 | integral = 0; 38 | } 39 | 40 | public void setPID(float kP, float kI, float kD) { 41 | this.kP = kP; 42 | this.kI = kI; 43 | this.kD = kD; 44 | } 45 | 46 | public void changePID(float kP, float kI, float kD) { 47 | this.kP += kP; 48 | this.kI += kI; 49 | this.kD += kD; 50 | } 51 | 52 | public float getP() { 53 | return this.kP; 54 | } 55 | 56 | public float getI() { 57 | return this.kI; 58 | } 59 | 60 | public float getD() { 61 | return this.kD; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/Profiler.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | public class Profiler { 4 | public static Profiler INSTANCE = null; 5 | 6 | static { 7 | INSTANCE = new Profiler(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/ProfilerUtil.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | public class ProfilerUtil { 4 | private static final ThreadLocal firstnanos = ThreadLocal.withInitial(() -> new Long(0)); 5 | private static final ThreadLocal lastnanos = ThreadLocal.withInitial(() -> new Long(0)); 6 | 7 | public static void start() { 8 | firstnanos.set(System.nanoTime()); 9 | } 10 | 11 | public static void measure(String text) { 12 | //System.out.println(text); 13 | if (firstnanos.get() == 0) { 14 | firstnanos.set(System.nanoTime()); 15 | lastnanos.set(System.nanoTime()); 16 | //System.out.println("[PROFILER] Started measurement."); 17 | return; 18 | } 19 | 20 | long elapsed = System.nanoTime() - firstnanos.get(); 21 | long diff = System.nanoTime() - lastnanos.get(); 22 | 23 | System.out.format("[PROFILER] [%d] %d: %s\n", elapsed, diff, text); 24 | 25 | lastnanos.set(System.nanoTime()); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/TextAlign.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | public enum TextAlign { 4 | CENTER, 5 | RIGHT, 6 | LEFT; 7 | } 8 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/Texture.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util; 2 | 3 | import java.awt.Graphics2D; 4 | import java.awt.image.BufferedImage; 5 | import java.io.File; 6 | import java.io.IOException; 7 | 8 | import javax.imageio.ImageIO; 9 | 10 | import com.jogamp.opengl.util.awt.TextureRenderer; 11 | 12 | public class Texture { 13 | public BufferedImage img; 14 | public int width = 0; 15 | public int height = 0; 16 | public int texx = 0; 17 | public int texy = 0; 18 | public TextureRenderer mTextureRenderer; 19 | private static Graphics2D tTextureGraphics2D; 20 | 21 | public Texture(File imgfile) throws IOException { 22 | this.img = ImageIO.read(imgfile); 23 | this.width = img.getWidth(); 24 | this.height = img.getHeight(); 25 | mTextureRenderer = new TextureRenderer(this.width, this.height, true, true); 26 | tTextureGraphics2D = mTextureRenderer.createGraphics(); 27 | tTextureGraphics2D.drawImage(this.img, 0, 0, null); 28 | tTextureGraphics2D.dispose(); 29 | mTextureRenderer.markDirty(0, 0, this.width, this.height); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/bsp/Camera.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.bsp; 2 | 3 | import me.lixko.csgoexternals.util.MathUtils; 4 | 5 | public class Camera { 6 | public float[] position = new float[3]; 7 | 8 | public float zNear, zFar, aspectRatio; 9 | public float fov, pitch, yaw; 10 | public float maxAngle; 11 | 12 | public Camera(int width, int height) { 13 | position = new float[] { 0, 0, 1 }; 14 | yaw = 0.0f; 15 | pitch = 0.0f; 16 | maxAngle = 89.0f; 17 | fov = 70.0f; 18 | zNear = 0.1f; 19 | zFar = 10000.0f; 20 | aspectRatio = ((float) width / (float) height); 21 | } 22 | 23 | // TODO 24 | public void LookAt(float[] pos) { 25 | if (pos == position) 26 | return; 27 | } 28 | 29 | public float getFOV() { 30 | return this.fov; 31 | } 32 | 33 | public void setFOV(float fov) { 34 | this.fov = fov; 35 | } 36 | 37 | public void addPosition(float[] off) { 38 | MathUtils.add(position, off); 39 | } 40 | 41 | public float[] getPosition() { 42 | return this.position; 43 | } 44 | 45 | public void setPosition(float[] off) { 46 | position = off; 47 | } 48 | 49 | public void setOrientation(float pitch, float yaw) { 50 | this.pitch = pitch; 51 | this.yaw = yaw; 52 | normalizeAngles(); 53 | } 54 | 55 | public void addOrientation(float pitch, float yaw) { 56 | this.pitch += pitch; 57 | this.yaw += yaw; 58 | normalizeAngles(); 59 | } 60 | 61 | public float[] getProjection() { 62 | return MathUtils.Matrix4x4.perspective(fov, aspectRatio, zNear, zFar); 63 | } 64 | 65 | public float[] getMatrix() { 66 | return MathUtils.Matrix4x4.mul(getProjection(), getView()); 67 | } 68 | 69 | public float[] getView() { 70 | return MathUtils.Matrix4x4.mul(getOrientation(), MathUtils.Matrix4x4.translate(new float[4*4], -position[0], -position[1], -position[2])); 71 | } 72 | 73 | public float[] getOrientation() { 74 | float[] orientation = MathUtils.Matrix4x4.rotate(pitch - 90.0f, 1, 0, 0); 75 | orientation = MathUtils.Matrix4x4.mul(orientation, MathUtils.Matrix4x4.rotate(yaw + 90.0f, 0, 0, 1)); 76 | return orientation; 77 | } 78 | 79 | public void normalizeAngles() { 80 | yaw = yaw % 360f; 81 | if (yaw < 0.0f) 82 | yaw += 360; 83 | if (pitch > maxAngle) 84 | pitch = maxAngle; 85 | else if (pitch < -maxAngle) 86 | pitch = -maxAngle; 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/bsp/Image.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.bsp; 2 | 3 | public class Image { 4 | public int nChannels; // The channels in the image (3 = RGB, 4 = RGBA) 5 | public int nWidth; // The width of the image in pixels 6 | public int nHeight; // The height of the image in pixels 7 | public byte[] pData; // The image pixel data 8 | 9 | public Image(int nChannels, int nWidth, int nHeight) { 10 | if (nChannels != 3 && nChannels != 4) 11 | throw new IllegalArgumentException("Channels not 3 or 4!"); 12 | 13 | this.nChannels = nChannels; 14 | this.nWidth = nWidth; 15 | this.nHeight = nHeight; 16 | this.pData = new byte[nWidth * nHeight * nChannels]; 17 | } 18 | 19 | public Image(Image orig) { 20 | nChannels = orig.nChannels; 21 | nWidth = orig.nWidth; 22 | nHeight = orig.nHeight; 23 | pData = orig.pData; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/bsp/Shader.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.bsp; 2 | 3 | import me.lixko.csgoexternals.util.DrawUtils; 4 | 5 | public class Shader { 6 | 7 | public int program, vertShader, fragShader, geomShader; 8 | 9 | public Shader(int program, int vertShader, int fragShader, int geomShader) { 10 | this.program = program; 11 | this.vertShader = vertShader; 12 | this.fragShader = fragShader; 13 | this.geomShader = geomShader; 14 | } 15 | 16 | public Shader() { 17 | } 18 | 19 | public int GetUniformLocation(String name) { 20 | return GetVariableLocation(name, true); 21 | } 22 | 23 | public int GetAttribLocation(String name) { 24 | return GetVariableLocation(name, false); 25 | } 26 | 27 | public int GetVariableLocation(String name, boolean isUniform) { 28 | if (isUniform) // uniform variables 29 | return DrawUtils.gl.glGetUniformLocation(program, name); 30 | else // attribute variables 31 | return DrawUtils.gl.glGetAttribLocation(program, name); 32 | } 33 | 34 | public void use() { 35 | DrawUtils.gl.glUseProgram(program); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/bsp/ShaderManager.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.bsp; 2 | 3 | import java.util.HashMap; 4 | 5 | import com.jogamp.opengl.GL; 6 | import com.jogamp.opengl.GL4; 7 | 8 | import me.lixko.csgoexternals.util.DrawUtils; 9 | import me.lixko.csgoexternals.util.FileUtil; 10 | 11 | public class ShaderManager { 12 | // credits: dude719 13 | 14 | private HashMap m_shaderMap = new HashMap(); 15 | private final String DEFAULT_SHADER = "DefaultShader"; 16 | 17 | final int MAX_LINE_LENGTH = 5; 18 | 19 | public ShaderManager() { 20 | m_shaderMap.put(DEFAULT_SHADER, new Shader()); 21 | } 22 | 23 | public Shader GetShader(String name) { 24 | return GetShader(name, false); 25 | } 26 | 27 | public Shader GetShader(String name, boolean useGeomShader) { 28 | Shader sh = m_shaderMap.get(name); 29 | if (sh != null) 30 | return sh; 31 | 32 | sh = Load(name + ".vert", name + ".frag", useGeomShader ? name + ".geom" : ""); 33 | if(sh != null) { 34 | m_shaderMap.put(name, sh); 35 | return sh; 36 | } 37 | return m_shaderMap.get(DEFAULT_SHADER); 38 | } 39 | 40 | public Shader Load(String vertexFilename, String fragmentFilename, String geometryFilename) { 41 | int vertShader = 0, fragShader = 0, geomShader = 0, programShader = 0; 42 | vertShader = LoadShader(GL4.GL_VERTEX_SHADER, vertexFilename); 43 | fragShader = LoadShader(GL4.GL_FRAGMENT_SHADER, fragmentFilename); 44 | geomShader = LoadShader(GL4.GL_GEOMETRY_SHADER, geometryFilename); 45 | 46 | if (vertShader == -1 || fragShader == -1 || geomShader == -1) { 47 | System.out.println("[Shaders] Failed to compile!"); 48 | return null; 49 | } 50 | 51 | // create a program 52 | programShader = DrawUtils.gl.glCreateProgram(); 53 | 54 | // attach the vertex and fragment shader codes, and the geometric if available 55 | DrawUtils.gl.glAttachShader(programShader, vertShader); 56 | DrawUtils.gl.glAttachShader(programShader, fragShader); 57 | if (geomShader != 0) 58 | DrawUtils.gl.glAttachShader(programShader, geomShader); 59 | 60 | // link 61 | System.out.println("Linking..."); 62 | DrawUtils.gl.glLinkProgram(programShader); 63 | 64 | // check link status 65 | final int[] statusarr = new int[1]; 66 | DrawUtils.gl.glGetProgramiv(programShader, GL4.GL_LINK_STATUS, statusarr, 0); 67 | 68 | if (statusarr[0] != GL.GL_TRUE) { 69 | // The link has failed, check log info 70 | final int[] logLength = new int[1]; 71 | DrawUtils.gl.glGetProgramiv(programShader, GL4.GL_INFO_LOG_LENGTH, logLength, 0); 72 | 73 | final byte[] log = new byte[logLength[0]]; 74 | DrawUtils.gl.glGetProgramInfoLog(programShader, logLength[0], (int[]) null, 0, log, 0); 75 | System.err.println("[Shaders] Failed to link the shader: " + new String(log)); 76 | return null; 77 | } 78 | 79 | // check if the shader will run in the current OpenGL state 80 | DrawUtils.gl.glValidateProgram(programShader); 81 | DrawUtils.gl.glGetProgramiv(programShader, GL4.GL_VALIDATE_STATUS, statusarr, 0); 82 | if (statusarr[0] != GL.GL_TRUE) { 83 | System.out.println("Shader program will not run in this OpenGL environment!"); 84 | return null; 85 | } 86 | 87 | return new Shader(programShader, vertShader, fragShader, geomShader); 88 | } 89 | 90 | public int LoadShader(int shaderType, String fileName) { 91 | if (fileName == "") 92 | return 0; 93 | // TODO: Set path! 94 | String shaderSrc = FileUtil.readFile("/home/erik/Dokumenty/Java/linux-csgo-externals/eclipse/CSGOExternals/shaders/" + fileName); 95 | System.out.println("[Shaders] Compiling: " + fileName); 96 | 97 | int s = DrawUtils.gl.glCreateShader(shaderType); 98 | DrawUtils.gl.glShaderSource(s, 1, new String[] { shaderSrc }, new int[] { shaderSrc.length() }, 0); 99 | DrawUtils.gl.glCompileShader(s); 100 | 101 | final int[] statusarr = new int[1]; 102 | DrawUtils.gl.glGetShaderiv(s, GL4.GL_COMPILE_STATUS, statusarr, 0); 103 | if (statusarr[0] == GL.GL_TRUE) 104 | return s; 105 | 106 | final int[] logLength = new int[1]; 107 | DrawUtils.gl.glGetShaderiv(s, GL4.GL_INFO_LOG_LENGTH, logLength, 0); 108 | 109 | final byte[] log = new byte[logLength[0]]; 110 | DrawUtils.gl.glGetShaderInfoLog(s, logLength[0], (int[]) null, 0, log, 0); 111 | DrawUtils.gl.glDeleteShader(s); 112 | System.err.println("[Shaders] Error compiling the shader: " + new String(log)); 113 | 114 | return -1; 115 | } 116 | 117 | } 118 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/demo/ArrayDataStream.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.demo; 2 | 3 | public class ArrayDataStream extends DataStream { 4 | 5 | private byte[] arr; 6 | 7 | public ArrayDataStream(byte[] data) { 8 | this.arr = data; 9 | this.length = data.length * 8; 10 | } 11 | 12 | public byte[] array() { 13 | return arr; 14 | } 15 | 16 | @Override 17 | public int readBit(int bitOffset) { 18 | return arr[bitOffset >> 3] >> (bitOffset & 7) & 1; 19 | } 20 | 21 | @Override 22 | public int readByte(int byteOffset) { 23 | return arr[byteOffset]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/demo/ProtoBuf.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.demo; 2 | 3 | import java.io.IOException; 4 | import java.nio.ByteBuffer; 5 | import java.nio.charset.StandardCharsets; 6 | 7 | import me.lixko.csgoexternals.util.StringFormat; 8 | 9 | public class ProtoBuf { 10 | public static int readVarInt32_simple(ByteBuffer stream) throws Exception { 11 | byte b = (byte) 0x80; 12 | int result = 0; 13 | for (int count = 0; (b & 0x80) != 0; count++) { 14 | b = stream.get(); 15 | 16 | if ((count < 4) || ((count == 4) && (((b & 0xF8) == 0) || ((b & 0xF8) == 0xF8)))) 17 | result |= (b & ~0x80) << (7 * count); 18 | else { 19 | if (count >= 10) 20 | throw new Exception("Nope nope nope nope! 10 bytes max!"); 21 | if ((count == 9) ? (b != 1) : ((b & 0x7F) != 0x7F)) 22 | throw new Exception("more than 32 bits are not supported"); 23 | } 24 | } 25 | 26 | return result; 27 | } 28 | 29 | public static int readVarInt32(ByteBuffer stream) throws IOException { 30 | byte tmp = stream.get(); 31 | if (tmp >= 0) { 32 | return tmp; 33 | } 34 | int result = tmp & 0x7f; 35 | if ((tmp = stream.get()) >= 0) { 36 | result |= tmp << 7; 37 | } else { 38 | result |= (tmp & 0x7f) << 7; 39 | if ((tmp = stream.get()) >= 0) { 40 | result |= tmp << 14; 41 | } else { 42 | result |= (tmp & 0x7f) << 14; 43 | if ((tmp = stream.get()) >= 0) { 44 | result |= tmp << 21; 45 | } else { 46 | result |= (tmp & 0x7f) << 21; 47 | result |= (tmp = stream.get()) << 28; 48 | if (tmp < 0) { 49 | stream.position(stream.position() - 5); 50 | byte[] data = new byte[16]; 51 | stream.get(data); 52 | throw new IOException("Malformed varint detected: " + StringFormat.hex(data)); 53 | } 54 | } 55 | } 56 | } 57 | return result; 58 | } 59 | 60 | public static String readString(ByteBuffer stream) throws Exception { 61 | int length = readVarInt32(stream); 62 | if (length < 0) 63 | throw new Exception("Negative string length: " + length); 64 | 65 | if (length == 0) 66 | return ""; 67 | 68 | String str = new String(stream.array(), stream.position(), length, StandardCharsets.UTF_8); 69 | stream.position(stream.position() + length); 70 | return str; 71 | } 72 | 73 | public static byte[] readIBytes(ByteBuffer stream) throws Exception { 74 | int length = stream.getInt(); 75 | if (length > stream.remaining()) 76 | throw new Exception("Buffer underflow: " + length + " - " + stream.remaining() + " = " + (length - stream.remaining())); 77 | 78 | byte[] data = new byte[length]; 79 | stream.get(data); 80 | return data; 81 | } 82 | 83 | public static byte[] readVBytes(ByteBuffer stream) throws Exception { 84 | int length = readVarInt32(stream); 85 | if (length > stream.remaining()) 86 | throw new Exception("Buffer underflow: " + length + " - " + stream.remaining() + " = " + (length - stream.remaining())); 87 | 88 | byte[] data = new byte[length]; 89 | stream.get(data); 90 | return data; 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/me/lixko/csgoexternals/util/demo/SendTable.java: -------------------------------------------------------------------------------- 1 | package me.lixko.csgoexternals.util.demo; 2 | 3 | import java.nio.ByteBuffer; 4 | import java.util.ArrayList; 5 | 6 | import me.lixko.csgoexternals.util.StringFormat; 7 | 8 | public class SendTable { 9 | 10 | public int isEnd; 11 | public int needsDecoder; 12 | public String netTableName; 13 | public ArrayList sendProps = new ArrayList<>(); 14 | 15 | public SendTable parse(ByteBuffer chunk) throws Exception { 16 | return parse(chunk, chunk.remaining()); 17 | } 18 | 19 | public SendTable parse(ByteBuffer stream, int length) throws Exception { 20 | sendProps = new ArrayList<>(); 21 | 22 | int read = 0; 23 | int start = stream.position(); 24 | if (length > stream.remaining()) 25 | throw new Exception("Buffer underflow: " + length + " - " + stream.remaining() + " = " + (length - stream.remaining())); 26 | 27 | while (read < length) { 28 | int desc = ProtoBuf.readVarInt32(stream); 29 | int wireType = desc & 7; 30 | int fieldNum = desc >> 3; 31 | 32 | if (wireType == 2) { 33 | if (fieldNum == 2) { 34 | netTableName = ProtoBuf.readString(stream); 35 | } else if (fieldNum == 4) { 36 | // Props are special. 37 | // We'll simply hope that gaben is nice and sends props last, just like he should. 38 | // System.out.println("___________________________________________________"); 39 | int len = ProtoBuf.readVarInt32(stream); 40 | sendProps.add(new SendProp().parse(stream, len)); 41 | } 42 | } else if (wireType == 0) { 43 | int val = ProtoBuf.readVarInt32(stream); 44 | switch (fieldNum) { 45 | case 1: 46 | isEnd = val; 47 | break; 48 | case 3: 49 | needsDecoder = val; 50 | break; 51 | default: 52 | // silently drop 53 | break; 54 | } 55 | } else { 56 | throw new Exception("Invalid data: " + wireType + " / " + fieldNum); 57 | } 58 | read = stream.position() - start; 59 | } 60 | return this; 61 | } 62 | 63 | public class SendProp { 64 | 65 | public int type; 66 | public String varName; 67 | public int flags; 68 | public int priority; 69 | public String DTName; 70 | public int numElements; 71 | public float lowValue; 72 | public float highValue; 73 | public int numBits; 74 | 75 | public SendProp parse(ByteBuffer chunk) throws Exception { 76 | return parse(chunk, chunk.remaining()); 77 | } 78 | 79 | public SendProp parse(ByteBuffer stream, int length) throws Exception { 80 | int start = stream.position(); 81 | int read = 0; 82 | 83 | if (length > stream.remaining()) 84 | throw new Exception("Buffer underflow: " + length + " - " + stream.remaining() + " = " + (length - stream.remaining())); 85 | 86 | // https://developers.google.com/protocol-buffers/docs/encoding#structure 87 | // System.out.println(" > " + length + " @ " + stream.position()); 88 | while (read < length) { 89 | int desc = ProtoBuf.readVarInt32(stream); 90 | int wireType = desc & 7; 91 | int fieldNum = desc >> 3; 92 | 93 | if (wireType == 2) { 94 | if (fieldNum == 2) { 95 | varName = ProtoBuf.readString(stream); 96 | } else if (fieldNum == 5) { 97 | DTName = ProtoBuf.readString(stream); 98 | } else { 99 | // int len = ProtoBuf.readVarInt32(stream); 100 | throw new Exception("Invalid fieldNum (" + fieldNum + "), maybe they added a new big field?"); 101 | } 102 | } else if (wireType == 0) { 103 | //if(fieldNum == 9) System.out.println("0: " + fieldNum + " | " + read + " / " + length + ", left " + stream.remaining()); 104 | 105 | int val = ProtoBuf.readVarInt32_simple(stream); 106 | switch (fieldNum) { 107 | case 1: 108 | type = val; 109 | break; 110 | case 3: 111 | flags = val; 112 | break; 113 | case 4: 114 | priority = val; 115 | break; 116 | case 6: 117 | numElements = val; 118 | break; 119 | case 9: 120 | numBits = val; 121 | break; 122 | default: 123 | // silently drop 124 | break; 125 | } 126 | } else if (wireType == 5) { 127 | float val = stream.getFloat(); 128 | 129 | switch (fieldNum) { 130 | case 7: 131 | lowValue = val; 132 | break; 133 | case 8: 134 | highValue = val; 135 | break; 136 | default: 137 | // silently drop 138 | break; 139 | } 140 | } else { 141 | throw new Exception("Invalid data: " + wireType + " / " + fieldNum); 142 | } 143 | read = stream.position() - start; 144 | //System.out.println(read + " / " + length + " | " + wireType + " / " + fieldNum); 145 | } 146 | return this; 147 | } 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ "$(whoami)" != 'root' ]; then 3 | echo "ERROR: You *must* run this script as root!" 4 | exit 1; 5 | fi 6 | ABSPATH=`pwd` 7 | java -cp "$ABSPATH/lib/*:$ABSPATH/CSGOExternals.jar" me.lixko.csgoexternals.Main "$@" 8 | -------------------------------------------------------------------------------- /textures/bomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/bomb.png -------------------------------------------------------------------------------- /textures/defuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/defuser.png -------------------------------------------------------------------------------- /textures/ranks/dmg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/dmg.png -------------------------------------------------------------------------------- /textures/ranks/global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/global.png -------------------------------------------------------------------------------- /textures/ranks/gold-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/gold-1.png -------------------------------------------------------------------------------- /textures/ranks/gold-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/gold-2.png -------------------------------------------------------------------------------- /textures/ranks/gold-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/gold-3.png -------------------------------------------------------------------------------- /textures/ranks/gold-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/gold-master.png -------------------------------------------------------------------------------- /textures/ranks/legendary-eagle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/legendary-eagle.png -------------------------------------------------------------------------------- /textures/ranks/lem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/lem.png -------------------------------------------------------------------------------- /textures/ranks/master-guardian-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/master-guardian-1.png -------------------------------------------------------------------------------- /textures/ranks/master-guardian-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/master-guardian-2.png -------------------------------------------------------------------------------- /textures/ranks/mge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/mge.png -------------------------------------------------------------------------------- /textures/ranks/sem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/sem.png -------------------------------------------------------------------------------- /textures/ranks/silver-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/silver-1.png -------------------------------------------------------------------------------- /textures/ranks/silver-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/silver-2.png -------------------------------------------------------------------------------- /textures/ranks/silver-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/silver-3.png -------------------------------------------------------------------------------- /textures/ranks/silver-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/silver-4.png -------------------------------------------------------------------------------- /textures/ranks/silver-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/silver-5.png -------------------------------------------------------------------------------- /textures/ranks/smfc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/ranks/smfc.png -------------------------------------------------------------------------------- /textures/weapons/item_assaultsuit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/item_assaultsuit.png -------------------------------------------------------------------------------- /textures/weapons/item_defuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/item_defuser.png -------------------------------------------------------------------------------- /textures/weapons/item_kevlar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/item_kevlar.png -------------------------------------------------------------------------------- /textures/weapons/weapon_ak47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_ak47.png -------------------------------------------------------------------------------- /textures/weapons/weapon_aug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_aug.png -------------------------------------------------------------------------------- /textures/weapons/weapon_awp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_awp.png -------------------------------------------------------------------------------- /textures/weapons/weapon_bizon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_bizon.png -------------------------------------------------------------------------------- /textures/weapons/weapon_c4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_c4.png -------------------------------------------------------------------------------- /textures/weapons/weapon_cz75a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_cz75a.png -------------------------------------------------------------------------------- /textures/weapons/weapon_deagle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_deagle.png -------------------------------------------------------------------------------- /textures/weapons/weapon_decoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_decoy.png -------------------------------------------------------------------------------- /textures/weapons/weapon_elite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_elite.png -------------------------------------------------------------------------------- /textures/weapons/weapon_famas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_famas.png -------------------------------------------------------------------------------- /textures/weapons/weapon_fiveseven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_fiveseven.png -------------------------------------------------------------------------------- /textures/weapons/weapon_flashbang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_flashbang.png -------------------------------------------------------------------------------- /textures/weapons/weapon_g3sg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_g3sg1.png -------------------------------------------------------------------------------- /textures/weapons/weapon_galilar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_galilar.png -------------------------------------------------------------------------------- /textures/weapons/weapon_glock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_glock.png -------------------------------------------------------------------------------- /textures/weapons/weapon_hegrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_hegrenade.png -------------------------------------------------------------------------------- /textures/weapons/weapon_hkp2000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_hkp2000.png -------------------------------------------------------------------------------- /textures/weapons/weapon_incgrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_incgrenade.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_bayonet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_bayonet.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_butterfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_butterfly.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_falchion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_falchion.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_flip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_flip.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_gut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_gut.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_karambit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_karambit.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_m9_bayonet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_m9_bayonet.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_push.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_t.png -------------------------------------------------------------------------------- /textures/weapons/weapon_knife_tactical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_knife_tactical.png -------------------------------------------------------------------------------- /textures/weapons/weapon_m249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_m249.png -------------------------------------------------------------------------------- /textures/weapons/weapon_m4a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_m4a1.png -------------------------------------------------------------------------------- /textures/weapons/weapon_m4a1_silencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_m4a1_silencer.png -------------------------------------------------------------------------------- /textures/weapons/weapon_mac10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_mac10.png -------------------------------------------------------------------------------- /textures/weapons/weapon_mag7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_mag7.png -------------------------------------------------------------------------------- /textures/weapons/weapon_molotov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_molotov.png -------------------------------------------------------------------------------- /textures/weapons/weapon_mp7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_mp7.png -------------------------------------------------------------------------------- /textures/weapons/weapon_mp9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_mp9.png -------------------------------------------------------------------------------- /textures/weapons/weapon_negev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_negev.png -------------------------------------------------------------------------------- /textures/weapons/weapon_nova.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_nova.png -------------------------------------------------------------------------------- /textures/weapons/weapon_p250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_p250.png -------------------------------------------------------------------------------- /textures/weapons/weapon_p90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_p90.png -------------------------------------------------------------------------------- /textures/weapons/weapon_revolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_revolver.png -------------------------------------------------------------------------------- /textures/weapons/weapon_sawedoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_sawedoff.png -------------------------------------------------------------------------------- /textures/weapons/weapon_scar20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_scar20.png -------------------------------------------------------------------------------- /textures/weapons/weapon_sg556.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_sg556.png -------------------------------------------------------------------------------- /textures/weapons/weapon_smokegrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_smokegrenade.png -------------------------------------------------------------------------------- /textures/weapons/weapon_ssg08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_ssg08.png -------------------------------------------------------------------------------- /textures/weapons/weapon_taser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_taser.png -------------------------------------------------------------------------------- /textures/weapons/weapon_tec9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_tec9.png -------------------------------------------------------------------------------- /textures/weapons/weapon_ump45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_ump45.png -------------------------------------------------------------------------------- /textures/weapons/weapon_usp_silencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_usp_silencer.png -------------------------------------------------------------------------------- /textures/weapons/weapon_xm1014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons/weapon_xm1014.png -------------------------------------------------------------------------------- /textures/weapons_outline/item_assaultsuit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/item_assaultsuit.png -------------------------------------------------------------------------------- /textures/weapons_outline/item_defuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/item_defuser.png -------------------------------------------------------------------------------- /textures/weapons_outline/item_kevlar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/item_kevlar.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_ak47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_ak47.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_aug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_aug.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_awp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_awp.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_bizon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_bizon.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_c4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_c4.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_cz75a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_cz75a.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_deagle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_deagle.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_decoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_decoy.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_elite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_elite.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_famas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_famas.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_fiveseven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_fiveseven.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_flashbang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_flashbang.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_g3sg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_g3sg1.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_galilar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_galilar.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_glock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_glock.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_hegrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_hegrenade.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_hkp2000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_hkp2000.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_incgrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_incgrenade.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_bayonet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_bayonet.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_butterfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_butterfly.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_falchion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_falchion.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_flip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_flip.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_gut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_gut.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_karambit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_karambit.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_m9_bayonet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_m9_bayonet.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_push.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_t.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_knife_tactical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_knife_tactical.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_m249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_m249.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_m4a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_m4a1.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_m4a1_silencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_m4a1_silencer.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_mac10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_mac10.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_mag7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_mag7.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_molotov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_molotov.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_mp7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_mp7.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_mp9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_mp9.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_negev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_negev.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_nova.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_nova.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_p250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_p250.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_p90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_p90.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_revolver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_revolver.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_sawedoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_sawedoff.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_scar20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_scar20.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_sg556.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_sg556.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_smokegrenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_smokegrenade.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_ssg08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_ssg08.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_taser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_taser.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_tec9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_tec9.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_ump45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_ump45.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_usp_silencer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_usp_silencer.png -------------------------------------------------------------------------------- /textures/weapons_outline/weapon_xm1014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericek111/java-csgo-externals/ff28241d06b330905354f84a0e876b8b62c84be3/textures/weapons_outline/weapon_xm1014.png --------------------------------------------------------------------------------