On Mon, Jan 26, 1998 at 11:43:14AM +0000, Daniel W. Burke wrote: > The way I handled that when I implemented this script system some time ago > (only made a few scripts, so it was largly unused until I wrote the olc for > it recently), is to have %actor% be used for everything... %actor% by itself > returns the memory pointer... i.e. me = (int) ch; Then use made a new > function that ran through the character list, and using type casting, looked > for a memory match, and add a call to that function to all the get_char > functions... (I ended up using this in other things, because it became > pretty convient, instead of searching the mud for pointers to a character > when he/she gets extracted)... Using the memory pointer in this way still isn't safe. Athough you do prevent referencing memory which has been freed, you could be pointing to a totally different character if that space has been reassigned to a new character. For example: Bob enters the game (Bob's char_data is created at 0x0000F000). Bob pokes mob with script, which sets %actor% to 0x0000F000. Bob rents (memory at 0x0000F000 is freed). Joe enters the game (Joe's char_data is created at 0x0000F000). Mob with script (after a delay) starts tracking %actor%, which is now Joe. Reusing the memory does occur a fair bit. It is difficult for players to exploit, but it will result in some hard to track down bugs. Pointers are only guarrenteed to be unique for a moment in time, not for the duration of the mud. Eric +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST