Here's a list of commands it registers. They're documented in more detail below...
- red_dump [entityIdx OR entityClassname] [endPosition] [filepathRelativeToServerGameDir] (startPosition)
- red_dump_key [entityIdx OR entityClassname] [endPosition] [keyId-OR-commandName] [filepathRelativeToServerGameDir] (startPosition)
- red_dump_floats [entityIdx OR entityClassname] [endPosition] [filepathRelativeToServerGameDir] (startPosition)
- red_diff [filename1] [filename2]
- red_exclude_diff [filename1] [filename2] [filename3] [excludeIdx (1-3)]
- red_find_value [entity] [endPosition] [value] [type]
- red_find_similar [entity] [endPosition] [knownNetProp] [type] [netClassname]
These commands which allow you to dump the raw data of an entity (or the first instance of an entity with a specific classname) to a file, as well as allowing diffing of the files you've dumped! You can also search for values...either a known value, or a value shared by a known network variable.
I was inspired to make this after seeing how wizards like voogru and FlaminSarge found all sorts of hidden props for various entities. Since I personally can't get a better way to do so up and running (i.e. I don't have a TF2 SDK with the sentry class) and I'm too VAC paranoid to use a program that reads memory, I figured getting a raw hex dump of entities would be the best way to go.
This plugin is only intended for a test server and it does not even do things like safe file path checking. Misuse could possibly crash a server. So don't blame me if you failed to read the giant text at the start of this thread.
USAGE
red_dump [entityIdx OR entityClassname] [endPosition] [filepathRelativeToServerGameDir] (startPosition)
Only tested in TF2 but I don't see why this wouldn't work on any Source game.
Also only tested with SM 1.5.X but it's probably good for many older versions.
HOW TO USE
So first you'll want to figure out the classname (NOT net classname) of whatever entity you want to discern state changes under normal circumstances for. I'll use obj_sentrygun of TF2 and a known net prop as an example. You need to have a current dump of all net props as well, so you can determine a good limit for reading an entity's data. (I think attempting to read beyond an entity's bounds may cause an error)
With obj_sentrygun, I saw that the highest offset was a 4-byte integer at position 2828:
Member: m_hAutoAimTarget (offset 2828) (type integer) (bits 21)
so I set my bytesToDump to 2832, though I could easily experiment with something higher if I wanted to. (there could be hidden props beyond 2832)
So I bound a couple keys on a server with just bots, went as engie with the Wrangler, and these are my two keybound commands:
red_dump obj_sentrygun 2832 tfsentry1.dmp
red_dump obj_sentrygun 2832 tfsentry2.dmp
I know the prop for a wrangled sentry is m_bPlayerControlled (offset 2780). I built a sentry and once it was complete, I did my first dump. Then when I wrangled the sentry, I did my second dump. I then opened both files in HxD (my favorite hex editor) and went to offset 2780. The difference couldn't be more clear:
So if I wanted to find some hidden netprop, I could use HxD's diff feature, or a dedicated binary diff program, and figure out where my desired hidden prop is by dumping before and during the state change I want to emulate by code. :D
An optional parameter is (startPosition), which allows you to start at a specified offset instead of zero. You do not need to subtract this from total bytes -- this is already done for you...since your entity's upper limit probably won't change except when a new version of your game is released. Makes it more convenient.
ADDED IN VERSION 0.2 First of all, I fixed a bug with Windows where 0x0A and/or 0x0D was being output as 0x0A0D...forgot to use the "wb" file flags. Whoops.
What it does: It's similar to the above, except it creates three dumps. The first dump is made when the command is executed and outputs to the file listed. The second dump executes before a key is pressed or command is executed by the user who calls the command and appends .1 to the filename, i.e. tfsentry.dmp.1. The third dump executes in the next frame, and appends .2 to the filename. i.e. tf2sentry.dmp.2. Since the whole point of this plugin was to emulate how hidden props were found, and the example that inspired me (FlaminSarge's force sentry fire prop) could only be found in a very tiny timing window and was dependent on user input, may as well fill this gap.
An optional parameter is (startPosition), which allows you to start at a specified offset instead of zero. You do not need to subtract this from total bytes -- this is already done for you...since your entity's upper limit probably won't change except when a new version of your game is released. Makes it more convenient.
What it does: It's a file differ! It'll print out diffs of bytes, shorts, ints, and floats at the current offset -and- up to three bytes before the current offset. It outputs to [filename1].cmp...so for the example it would output to tfsentry1.dmp.cmp. Here's some example output from where I just change a sentry's angle, since the big draw with this differ is getting floats (note: the forum stripped the formatting, but there is indentation in the real thing!):
Spoiler
Offset 0xa94 is different. Analysis below:
File one byte is 0 (0x0), file two byte is 59 (0x3b)
OFFSET-0 file one short is 20992 (0x5200), file two short is 58939 (0xe63b)
OFFSET-1 file one short is 0 (0x0), file two short is 15104 (0x3b00)
OFFSET-0 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-1 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
OFFSET-2 file one int 1375731712 (0x52000000) -or- float 137438953472.000000, file two int -432340992 (0xe63b0000) -or- float -220770633074155900000000.000000
OFFSET-3 file one int 0 (0x0) -or- float 0.000000, file two int 989855744 (0x3b000000) -or- float 0.001953
Offset 0xa95 is different. Analysis below:
File one byte is 82 (0x52), file two byte is 230 (0xe6)
OFFSET-0 file one short is 338 (0x152), file two short is 51430 (0xc8e6)
OFFSET-1 file one short is 20992 (0x5200), file two short is 58939 (0xe63b)
OFFSET-0 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-1 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-2 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
OFFSET-3 file one int 1375731712 (0x52000000) -or- float 137438953472.000000, file two int -432340992 (0xe63b0000) -or- float -220770633074155900000000.000000
Offset 0xa96 is different. Analysis below:
File one byte is 1 (0x1), file two byte is 200 (0xc8)
OFFSET-0 file one short is 49665 (0xc201), file two short is 16584 (0x40c8)
OFFSET-1 file one short is 338 (0x152), file two short is 51430 (0xc8e6)
OFFSET-0 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-1 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-2 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-3 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
Offset 0xa97 is different. Analysis below:
File one byte is 194 (0xc2), file two byte is 64 (0x40)
OFFSET-0 file one short is 194 (0xc2), file two short is 51264 (0xc840)
OFFSET-1 file one short is 49665 (0xc201), file two short is 16584 (0x40c8)
OFFSET-0 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-1 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-2 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-3 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
Offset 0xa98 is different. Analysis below:
File one byte is 0 (0x0), file two byte is 200 (0xc8)
OFFSET-0 file one short is 32512 (0x7f00), file two short is 456 (0x1c8)
OFFSET-1 file one short is 194 (0xc2), file two short is 51264 (0xc840)
OFFSET-0 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-1 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-2 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-3 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
Offset 0xa99 is different. Analysis below:
File one byte is 127 (0x7f), file two byte is 1 (0x1)
OFFSET-0 file one short is 127 (0x7f), file two short is 11777 (0x2e01)
OFFSET-1 file one short is 32512 (0x7f00), file two short is 456 (0x1c8)
OFFSET-0 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-1 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-2 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-3 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
Offset 0xa9a is different. Analysis below:
File one byte is 0 (0x0), file two byte is 46 (0x2e)
OFFSET-0 file one short is 16896 (0x4200), file two short is 17198 (0x432e)
OFFSET-1 file one short is 127 (0x7f), file two short is 11777 (0x2e01)
OFFSET-0 file one int 16896 (0x4200) -or- float 0.000000, file two int 17198 (0x432e) -or- float 0.000000
OFFSET-1 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-2 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-3 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
Offset 0xa9b is different. Analysis below:
File one byte is 66 (0x42), file two byte is 67 (0x43)
OFFSET-0 file one short is 66 (0x42), file two short is 67 (0x43)
OFFSET-1 file one short is 16896 (0x4200), file two short is 17198 (0x432e)
OFFSET-0 file one int 66 (0x42) -or- float 0.000000, file two int 67 (0x43) -or- float 0.000000
OFFSET-1 file one int 16896 (0x4200) -or- float 0.000000, file two int 17198 (0x432e) -or- float 0.000000
OFFSET-2 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-3 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
Offset 0xaa0 is different. Analysis below:
File one byte is 0 (0x0), file two byte is 59 (0x3b)
OFFSET-0 file one short is 20992 (0x5200), file two short is 58939 (0xe63b)
OFFSET-1 file one short is 0 (0x0), file two short is 15104 (0x3b00)
OFFSET-0 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-1 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
OFFSET-2 file one int 1375731712 (0x52000000) -or- float 137438953472.000000, file two int -432340992 (0xe63b0000) -or- float -220770633074155900000000.000000
OFFSET-3 file one int 0 (0x0) -or- float 0.000000, file two int 989855744 (0x3b000000) -or- float 0.001953
Offset 0xaa1 is different. Analysis below:
File one byte is 82 (0x52), file two byte is 230 (0xe6)
OFFSET-0 file one short is 338 (0x152), file two short is 51430 (0xc8e6)
OFFSET-1 file one short is 20992 (0x5200), file two short is 58939 (0xe63b)
OFFSET-0 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-1 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-2 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
OFFSET-3 file one int 1375731712 (0x52000000) -or- float 137438953472.000000, file two int -432340992 (0xe63b0000) -or- float -220770633074155900000000.000000
Offset 0xaa2 is different. Analysis below:
File one byte is 1 (0x1), file two byte is 200 (0xc8)
OFFSET-0 file one short is 49665 (0xc201), file two short is 16584 (0x40c8)
OFFSET-1 file one short is 338 (0x152), file two short is 51430 (0xc8e6)
OFFSET-0 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-1 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-2 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
OFFSET-3 file one int 22151168 (0x1520000) -or- float 0.000000, file two int -924435712 (0xc8e63b00) -or- float -471512.000000
Offset 0xaa3 is different. Analysis below:
File one byte is 194 (0xc2), file two byte is 64 (0x40)
OFFSET-0 file one short is 194 (0xc2), file two short is 51264 (0xc840)
OFFSET-1 file one short is 49665 (0xc201), file two short is 16584 (0x40c8)
OFFSET-0 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-1 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-2 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
OFFSET-3 file one int -1040100864 (0xc2015200) -or- float -32.330078, file two int 1086907963 (0x40c8e63b) -or- float 6.278104
Offset 0xaa4 is different. Analysis below:
File one byte is 0 (0x0), file two byte is 200 (0xc8)
OFFSET-0 file one short is 32512 (0x7f00), file two short is 456 (0x1c8)
OFFSET-1 file one short is 194 (0xc2), file two short is 51264 (0xc840)
OFFSET-0 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-1 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-2 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
OFFSET-3 file one int 12714322 (0xc20152) -or- float 0.000000, file two int -935278362 (0xc840c8e6) -or- float -197411.593750
Offset 0xaa5 is different. Analysis below:
File one byte is 127 (0x7f), file two byte is 1 (0x1)
OFFSET-0 file one short is 127 (0x7f), file two short is 11777 (0x2e01)
OFFSET-1 file one short is 32512 (0x7f00), file two short is 456 (0x1c8)
OFFSET-0 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-1 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-2 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
OFFSET-3 file one int 2130756097 (0x7f00c201) -or- float 171148509333434500000000000000000000000.00000 0, file two int 29901000 (0x1c840c8) -or- float 0.000000
Offset 0xaa6 is different. Analysis below:
File one byte is 0 (0x0), file two byte is 46 (0x2e)
OFFSET-0 file one short is 16896 (0x4200), file two short is 17198 (0x432e)
OFFSET-1 file one short is 127 (0x7f), file two short is 11777 (0x2e01)
OFFSET-0 file one int 16896 (0x4200) -or- float 0.000000, file two int 17198 (0x432e) -or- float 0.000000
OFFSET-1 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-2 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
OFFSET-3 file one int 8323266 (0x7f00c2) -or- float 0.000000, file two int 771868736 (0x2e01c840) -or- float 0.000000
Offset 0xaa7 is different. Analysis below:
File one byte is 66 (0x42), file two byte is 67 (0x43)
OFFSET-0 file one short is 66 (0x42), file two short is 67 (0x43)
OFFSET-1 file one short is 16896 (0x4200), file two short is 17198 (0x432e)
OFFSET-0 file one int 66 (0x42) -or- float 0.000000, file two int 67 (0x43) -or- float 0.000000
OFFSET-1 file one int 16896 (0x4200) -or- float 0.000000, file two int 17198 (0x432e) -or- float 0.000000
OFFSET-2 file one int 4325503 (0x42007f) -or- float 0.000000, file two int 4402689 (0x432e01) -or- float 0.000000
OFFSET-3 file one int 1107328768 (0x42007f00) -or- float 32.124023, file two int 1127088584 (0x432e01c8) -or- float 174.006958
Offset 0xae4 is different. Analysis below:
File one byte is 61 (0x3d), file two byte is 51 (0x33)
OFFSET-0 file one short is 27197 (0x6a3d), file two short is 37683 (0x9333)
OFFSET-1 file one short is 15616 (0x3d00), file two short is 13056 (0x3300)
OFFSET-0 file one int 1134258749 (0x439b6a3d) -or- float 310.829986, file two int 1134400307 (0x439d9333) -or- float 315.149993
OFFSET-1 file one int -1687536384 (0x9b6a3d00) -or- float -0.000000, file two int -1651297536 (0x9d933300) -or- float -0.000000
OFFSET-2 file one int 1782382592 (0x6a3d0000) -or- float 57121744976791220000000000.000000, file two int -1825374208 (0x93330000) -or- float -0.000000
OFFSET-3 file one int 1023410176 (0x3d000000) -or- float 0.031250, file two int 855638016 (0x33000000) -or- float 0.000000
Offset 0xae5 is different. Analysis below:
File one byte is 106 (0x6a), file two byte is 147 (0x93)
OFFSET-0 file one short is 39786 (0x9b6a), file two short is 40339 (0x9d93)
OFFSET-1 file one short is 27197 (0x6a3d), file two short is 37683 (0x9333)
OFFSET-0 file one int 4430698 (0x439b6a) -or- float 0.000000, file two int 4431251 (0x439d93) -or- float 0.000000
OFFSET-1 file one int 1134258749 (0x439b6a3d) -or- float 310.829986, file two int 1134400307 (0x439d9333) -or- float 315.149993
OFFSET-2 file one int -1687536384 (0x9b6a3d00) -or- float -0.000000, file two int -1651297536 (0x9d933300) -or- float -0.000000
OFFSET-3 file one int 1782382592 (0x6a3d0000) -or- float 57121744976791220000000000.000000, file two int -1825374208 (0x93330000) -or- float -0.000000
Offset 0xae6 is different. Analysis below:
File one byte is 155 (0x9b), file two byte is 157 (0x9d)
OFFSET-0 file one short is 17307 (0x439b), file two short is 17309 (0x439d)
OFFSET-1 file one short is 39786 (0x9b6a), file two short is 40339 (0x9d93)
OFFSET-0 file one int 17307 (0x439b) -or- float 0.000000, file two int 17309 (0x439d) -or- float 0.000000
OFFSET-1 file one int 4430698 (0x439b6a) -or- float 0.000000, file two int 4431251 (0x439d93) -or- float 0.000000
OFFSET-2 file one int 1134258749 (0x439b6a3d) -or- float 310.829986, file two int 1134400307 (0x439d9333) -or- float 315.149993
OFFSET-3 file one int -1687536384 (0x9b6a3d00) -or- float -0.000000, file two int -1651297536 (0x9d933300) -or- float -0.000000
Limitations: Max file size is 32kb. Also, both files must be the same size.
ADDED IN VERSION 0.3 Bugfixes and the addition of an optional parameter for start position for the dump commands. (edited the documentation above) Also added the following command:
What it does: It's an unusual but useful diff involving three files. First, bytes of the files which haven't been excluded are compared. Then they're both diffed against the excluded file. If this byte is different in all three files, no analysis is made for this difference. The reason I made this was because of common spam entries like animations or position changes. If you make one dump in one state and two dumps in a different state, red_exclude_diff will get rid of a lot of entries you won't care about since it's unrelated to the state change you're trying to emulate. It makes finding the hidden props you want less time consuming.
ADDED IN VERSION 0.4 Bugfixes, the ability for red_dump_key to also listen for commands (edited the documentation above) and dumps with startPosition set will fill the unwanted bytes with periods so diffs have the correct offset. Also added the following command:
What it does: It checks every offset from startPosition to (endPosition - 3) and writes it to a human-readable file as a float. It also shows the hex value for reference. It's useful if you have a sense of range (but not an exact value) for a hidden float you're trying to find.
What it does: It finds a specific value. Note that it obviously can't do real type checking, so it'll just find raw matches for the value and type's length. (1, 2, or 4) The result is printed to both your local console and the server console.
What it does: It gets the value of a known netprop that you specify and then searches the entity for matching values. Note that it obviously can't do real type checking, so it'll just find raw matches for the value and type's length. (1, 2, or 4) The result is printed to both your local console and the server console.
RELEASE HISTORY/SOURCES v0.4 (2014-06-30)
- Added red_dump_floats - Added red_find_similar - Added red_find_value
- red_dump_key now accepts commands as well as input keys, as the trigger for the second and third dumps.
- Changing the start position when doing a hex dump will now fill the skipped bytes with periods, so that when you go to diff them, your offsets will be correct. (and these bytes will not be counted in diffs since both files will have them the same)
- Minor bugfixes
v0.3 (2014-06-25)
- Added red_exclude_diff
- Added optional parameter to red_dump and red_dump_key for a start position.
- Fixed diff to print out offsets in decimal as well as hex, since sm_dump_netprops outputs in decimal.
- Fixed the usage printouts. (was calling everything red_dump lol)
v0.2 (2014-06-24)
- Added red_dump_key
- Added red_diff - Fixed a glitch where 0x0A and/or 0x0D would be turned into windows newlines in the dump.
Very nice; you might extend it to use LoadFromAddress to load arbitrary addresses, though that's just as dangerous and essentially equivalent if you're using this for entities.
I'm wondering how strange it would be to monitor changes in an entity's data for a set number of bytes at a particular offset using this. Say, I want to watch the 10 bytes after 8440 on CTFPlayer. Probably doable, I'm guessing.
__________________
Bread EOTL GunMettle Invasion Jungle Inferno 64-bit will break everything. Don't even ask.
All plugins: Randomizer/GiveWeapon, ModelManager, etc.
Post in plugin threads with questions. Steam is for playing games.
You will be fed to javalia otherwise. Psyduck likes replays.
Very nice; you might extend it to use LoadFromAddress to load arbitrary addresses, though that's just as dangerous and essentially equivalent if you're using this for entities.
I'm wondering how strange it would be to monitor changes in an entity's data for a set number of bytes at a particular offset using this. Say, I want to watch the 10 bytes after 8440 on CTFPlayer. Probably doable, I'm guessing.
I mentioned something like this to sarysa, have it compare a specified range and show only diffs as it happens in game. I think it was planned fort he future. I made something simple ages ago that would monitor offset changes for an entity, but it would only watch/set specific bytes, not compare a range for finding new stuff, which is the point of this.
__________________
Profile - Plugins
Add me on steam if you are seeking sp/map/model commissions.
Sounds like a terribly efficient way to encourage awful plugin habits.
LoadFromAddress and friends should go the way of the trash bin. You shouldn't be manipulating data at random offsets in entities, your code will never survive updates.
Released version 0.2, which now supports dumping an entity around a player's keystroke, and most importantly -- a differ! Now Floats will be a lot easier to find and manipulate. Also fixed a glitch in 0.1 with output. I added a link to the old 0.1 but it sucks, get 0.2.
Sounds like a terribly efficient way to encourage awful plugin habits.
LoadFromAddress and friends should go the way of the trash bin. You shouldn't be manipulating data at random offsets in entities, your code will never survive updates.
There are a few exceptions, like setting projectile damage, that this type stuff can be ok for.
__________________
Profile - Plugins
Add me on steam if you are seeking sp/map/model commissions.
Sounds like a terribly efficient way to encourage awful plugin habits.
LoadFromAddress and friends should go the way of the trash bin. You shouldn't be manipulating data at random offsets in entities, your code will never survive updates.
Personally, I'd love it if we could get support for reading things inside CUtlVectors using GetEntProp and friends, but until we do, we may be stuck with LoadFromAddress.
I did some work with this before, but it's messy to try to do and unfortunately I think I accidentally wiped my local copy when switching over from pointing at the hg.alliedmods.net source to the github source.
__________________
Not currently working on SourceMod plugin development.
Personally, I'd love it if we could get support for reading things inside CUtlVectors using GetEntProp and friends, but until we do, we may be stuck with LoadFromAddress.
Pull requests welcome. All of the CUtlVector code for sendprops is in the SDK.