cjfan_ Posted September 10, 2021 Share Posted September 10, 2021 (edited) Hi, how can I store string literals (GXT keys e.g 'GUN1') in a memory allocated array? For example lets say I have this array: 0AC8: 0@ = allocate_memory_size 16 //2 strings. Is string size 8 bytes? I tried something like this write_memory 0@ size 8 value 'GUN1' virtual_protect 0 0A8D: 1@ = read_memory 0@ size 8 virtual_protect 0 but it doesn't work. Edited September 11, 2021 by GrGTaGamer Link to comment https://gtaforums.com/topic/975494-sa-cleo-how-to-store-string-literals-in-memory/ Share on other sites More sharing options...
XMDS Posted September 10, 2021 Share Posted September 10, 2021 The command to read and write memory only supports 1, 2, 4 bytes I think you should allocate memory and pass the string directly to the variable. There is no need to write characters into memory. Or use character variables s and v Link to comment https://gtaforums.com/topic/975494-sa-cleo-how-to-store-string-literals-in-memory/#findComment-1071640903 Share on other sites More sharing options...
cjfan_ Posted September 10, 2021 Author Share Posted September 10, 2021 (edited) Well, I need an array of strings. A normal array (e.g 0@(index, 12s) or $2323(index, 12s)) uses local vars which I kinda need. Where does an array start using vars from? 0@? Edited September 10, 2021 by GrGTaGamer Link to comment https://gtaforums.com/topic/975494-sa-cleo-how-to-store-string-literals-in-memory/#findComment-1071640911 Share on other sites More sharing options...
OrionSR Posted September 11, 2021 Share Posted September 11, 2021 Keep in mind that each short string (7 bytes plus a null terminator) will use two variables, so @0[1] will be stored in local vars 2@ and 3@. There really isn't enough room for string arrays in a custom script. Can you adapt your script to a custom mission so you have access to the full local var set? I often use out of range "extended variable space" for testing with string arrays. The area of SCM memory beyond the global var space and before the main loop in the main script isn't needed any more by the time a cleo script can actually run. If your main script isn't too heavily modified you should be able to safely use global variables $12000 thru $14999 for temporary use. However, the proper strategy, after the bugs have been ironed out with dirty tricks, would be you reserve two local vars to hold the gxt key and use jump tables/switch case or if-then-else constructs to assign a hard coded gxt string as needed. There are examples of this strategy buried in a standard main - forget which missions now. CrimeSplash, included with the Crimes and Chaos Toolkit I put together for testing the wanted level system might provide a useful example. The script was built using the strategy described above. First I got it working with the easy extended global var string arrays, but didn't think that would be a safe script to share, so I converted the arrays to jump tables. Link to comment https://gtaforums.com/topic/975494-sa-cleo-how-to-store-string-literals-in-memory/#findComment-1071641315 Share on other sites More sharing options...
cjfan_ Posted September 11, 2021 Author Share Posted September 11, 2021 (edited) If I have a string in memory loaded with sscanf (0x8220AD) how can I use it in opcodes that take string literals (e.g 08DB)? EDIT: Basically I have a pointer var to a string (4 bytes) and I need to save it in a string variable (characters). nvm I did it using 0A8D Edited September 11, 2021 by GrGTaGamer Link to comment https://gtaforums.com/topic/975494-sa-cleo-how-to-store-string-literals-in-memory/#findComment-1071641489 Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now