Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    1. Red Dead Redemption 2

      1. PC
      2. Gameplay
      3. Missions
      4. Help & Support
    2. Red Dead Online

      1. Gameplay
      2. Find Lobbies & Outlaws
      3. Help & Support
    1. Crews & Posses

      1. Recruitment
    2. Events

    1. GTA Online

      1. Diamond Casino & Resort
      2. DLC
      3. Find Lobbies & Players
      4. Guides & Strategies
      5. Vehicles
      6. Content Creator
      7. Help & Support
    2. Grand Theft Auto Series

    3. GTA 6

    4. GTA V

      1. PC
      2. Guides & Strategies
      3. Help & Support
    5. GTA IV

      1. Episodes from Liberty City
      2. Multiplayer
      3. Guides & Strategies
      4. Help & Support
      5. GTA Mods
    6. GTA Chinatown Wars

    7. GTA Vice City Stories

    8. GTA Liberty City Stories

    9. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    10. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    11. GTA III

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    12. Top Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    13. Wiki

      1. Merchandising
    1. GTA Modding

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    3. Featured Mods

      1. DYOM
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Red Dead Redemption

    2. Rockstar Games

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Programming
      5. Movies & TV
      6. Music
      7. Sports
      8. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. News

    2. Forum Support

    3. Site Suggestions

Deji

A Q About CLEO Saves...

Recommended Posts

Deji

Okay... I've run into that common problem of not having enough variables and I'm thinking of using CLEO Saves.... So I wanted to know something about how they worked...

 

I've always assumed that each CLEO Save could be overwritten by another script using the same CLEO Save, so I tried to never use them. But the thought suddenly occured to me that they might be unique to each .cs script... Which I need!!

 

Are CLEO Saves unique to a CLEO Script? I mean, if 2 CLEO Scripts used the same CLEO Save, they wouldn't overwrite each other, would they?

 

I cant use Arrays, they seem to disable all of my CLEO Scripts upon assigning something to them.

 

I cant save to a file, because I don't have enough local variables to store the information I want saving.

 

I cant use globals... You could probably guess why. colgate.gif

 

 

Hopefully the answer is "Yes, each CLEO Script can have up to 1000 saves." so that I can complete my mod and enhance many others smile.gif

Share this post


Link to post
Share on other sites
gtasearcher

Each CLEO thread (and I don't say just 1 .cs -> 1 thread, no, you can [literally] have 1000 threads in one .cs) can have only 1 "addition" in the sav file for the save after using 0A95.

Share this post


Link to post
Share on other sites
ZAZ

 

Okay... I've run into that common problem of not having enough variables and I'm thinking of using CLEO Saves.... So I wanted to know something about how they worked...

 

I've always assumed that each CLEO Save could be overwritten by another script using the same CLEO Save, so I tried to never use them. But the thought suddenly occured to me that they might be unique to each .cs script... Which I need!!

 

Are CLEO Saves unique to a CLEO Script? I mean, if 2 CLEO Scripts used the same CLEO Save, they wouldn't overwrite each other, would they?

 

I cant use Arrays, they seem to disable all of my CLEO Scripts upon assigning something to them.

 

I cant save to a file, because I don't have enough local variables to store the information I want saving.

 

I cant use globals... You could probably guess why. colgate.gif

 

 

Hopefully the answer is "Yes, each CLEO Script can have up to 1000 saves." so that I can complete my mod and enhance many others smile.gif

I dont know what you mean with "2 CLEO Scripts used the same CLEO Save/if 2 CLEO Scripts used the same CLEO Save, they wouldn't overwrite each other"

Can a thread use a savegame? I can only load a savegame.

 

If a save is done, cleo stores informations of all available cleo script, I believe.

In each case if the script contains enable_thread_saving

Don't know what will be saved if this entry is missing, I believe only the thread name.

 

local variables will not be saved, but a parked_car_generator which is executed by a local will be saved, pickups and objects also.

They will not be saved as local of the script, but as new instance with any var (dont know what the exe use therefore)

They are stored then in the original savefiles.

 

Using 0A95: enable_thread_saving stores the script state, I assume by getting the thread pointer.

After loading such a savegame the thread continue the run from this point

 

To can use more locals I wrote more threads and inserted it in same cs file

a member named

(-.-) posted a nice template:

 

It is, indeed, possible.
{$CLEO}thread 'THREAD'[email protected] == 1then goto @start1endif [email protected] == 2then goto @start2endif [email protected] == 3then goto @startend0A92: create_custom_thread "thread.cs" {with parameters} 10A92: create_custom_thread "thread.cs" {with parameters} 20A92: create_custom_thread "thread.cs" {with parameters} 30A93: end_custom_thread:start1// contents:start2// contents:start3// contents

Compile as thread.cs

 

Fourthermore you can use the special global Cleo var:

 

0AB3: var 0 = 10or0006: [email protected] =  10  // integer values0AB3: var 0 = [email protected]: [email protected] = var 0

 

 

Or you can use ADMA. Its unknown if it can cause problems.

I often saw it in other mod scripts. Ryosuke often use it:

 

&57 += &120(&231,4i)

 

 

 

Back to locals, enable_thread_saving and more threads in a cs file by using create_custom_thread with parameter.

It happend that a guy asked if it possible to merge 3 save scripts into one cs file.

Lets say he want to add 60 savepoints in classic pickup manner.

So it needs minimum 60 locals for radar marker and depending on the fact if it is in same interior or not,

it needs additional 20-60 locals for pickups.

 

But it was not possible to do because the save stores only one thread pointer in a save file

It would be nessesary to save the script state of each thread in the cs file but it stores only one thread pointer of each cs file.

 

 

Edited by ZAZ

Share this post


Link to post
Share on other sites
gtasearcher

ZAZ, (-.-) is actually me. I used it 'cause I couldn't acces my account blush.gif

Share this post


Link to post
Share on other sites
ZAZ
ZAZ, (-.-) is actually me. I used it 'cause I couldn't acces my account blush.gif

yo, I thought so and searched in your "All posts by a member" but couldn' find it. turn.gif

Share this post


Link to post
Share on other sites
gtasearcher
ZAZ, (-.-) is actually me. I used it 'cause I couldn't acces my account blush.gif

yo, I thought so and searched in your "All posts by a member" but couldn' find it. turn.gif

Well the accounts didn't get merged, but (-.-) got banned under my request.

Share this post


Link to post
Share on other sites
Deji
Each CLEO thread (and I don't say just 1 .cs -> 1 thread, no, you can [literally] have 1000 threads in one .cs) can have only 1 "addition" in the sav file for the save after using 0A95.

I'm sure that's not true. If you look at the sanny builder help file...

 

 

One file – one thread. Each CLEO-script must be made as a single thread compiled in a single file. If you need more threads for your script, use the opcodes 004F or 0A92, depending of where is that additional thread located - in the main.scm or in a separate cs-file.

 

I've tried starting a new thread in the same .cs file and it crashed... As the help file says, only external .cs scripts and threads in the main.scm are allowed...

 

 

Anyway, I think I also got my answer from the help file...

 

 

0AB3: var 0 = 10

 

0AB3 sets a new value of the global CLEO variable. These variables can be used to data communication between CLEO threads, or between CLEO and the main.scm. The total number of such variables is 100. Their values are saved in the CLEO save.

This variables can be used in the main.scm as alternative to the common global variables.

 

So I guess that, yes, they would overwrite each others save data... Which is kinda awkward for me confused.gif I guess I just have to hope downloaders don't have another script using those saves mercie_blink.gif

 

 

@ZAZ

 

Not talking about saving the game, I mean saving variables so that the information can be retrieved again later. Just another kind of global variable, really... But I need one that offers me alot more variables and is unique to only the 1 .cs script.

Share this post


Link to post
Share on other sites
Adler

 

Not talking about saving the game, I mean saving variables so that the information can be retrieved again later. Just another kind of global variable, really... But I need one that offers me alot more variables and is unique to only the 1 .cs script.

I checked out the source of Ryosuke's Skin Selector which he says uses his own method of saving data without using CLEO Saves. This is the script that he uses:

 

:SKIN_INITwait 0if03D9:   save_done jf @SKIN_INIT0A99: chdir 0if8AAB:  not file_exists "cleo/skin_o.sav"then   if   0A9A: [email protected] = openfile "cleo/skin_o.sav" mode 0x6277  // IF and SET   then       0006: [email protected] = 0x43010253       0A9E: writefile [email protected] size 20 from [email protected]       for [email protected] = 0 to 4           0006: [email protected]([email protected],5i) = 0       end       for [email protected] = 0 to 7           0A9E: writefile [email protected] size 12 from [email protected]           0A9E: writefile [email protected] size 20 from [email protected]       end       0A9B: closefile [email protected]   endendgosub @GET_ADDRESS000E: [email protected] -= @TEMP_MEMORYfor [email protected] = 0 to 63   0A8C: write_memory [email protected] size 4 value 0 virtual_protect 0   000A: [email protected] += 4 endif0A9A: [email protected] = openfile "cleo/skin_o.sav" mode 0x6272  // IF and SETthen   0A9D: readfile [email protected] size 4 to [email protected]   if   0039:   [email protected] == 0x43010253   then       gosub @GET_ADDRESS       000E: [email protected] -= @TEMP_MEMORY       for [email protected] = 0 to 7           0A9D: readfile [email protected] size 12 to [email protected]           for [email protected] = 0 to 2               0A8C: write_memory [email protected] size 4 value [email protected]([email protected],5i) virtual_protect 0               000A: [email protected] += 4            end           0A9D: readfile [email protected] size 20 to [email protected]           for [email protected] = 0 to 4               0A8C: write_memory [email protected] size 4 value [email protected]([email protected],5i) virtual_protect 0               000A: [email protected] += 4            end       end   end   0A9B: closefile [email protected]

 

I think this would be a good way to save data to your own file without having it overwritten by other CLEO Scripts (if it actually happens confused.gif ).

 

If you want more vars then just use 0A92 to create a custom thread like gtasearcher said.

 

{$CLEO}thread 'THREAD'[email protected] == 1then goto @start1endif [email protected] == 2then goto @start2endif [email protected] == 3then goto @startend0A92: create_custom_thread "thread.cs" {with parameters} 10A92: create_custom_thread "thread.cs" {with parameters} 20A92: create_custom_thread "thread.cs" {with parameters} 30A93: end_custom_thread:start1// contents:start2// contents:start3// contents

 

You could also create a custom thread into .s files too. These are like subscripts linked to the main script so it gives you more vars to work with. The parameters for 0A92 are the vars from the main script that you want to import into the subscripts.

 

Hope this helps! smile.gif

Share this post


Link to post
Share on other sites
Deji
Not talking about saving the game, I mean saving variables so that the information can be retrieved again later. Just another kind of global variable, really... But I need one that offers me alot more variables and is unique to only the 1 .cs script.

I checked out the source of Ryosuke's Skin Selector which he says uses his own method of saving data without using CLEO Saves. This is the script that he uses:

 

:SKIN_INITwait 0if03D9:   save_done jf @SKIN_INIT0A99: chdir 0if8AAB:  not file_exists "cleo/skin_o.sav"then   if   0A9A: [email protected] = openfile "cleo/skin_o.sav" mode 0x6277  // IF and SET   then       0006: [email protected] = 0x43010253       0A9E: writefile [email protected] size 20 from [email protected]       for [email protected] = 0 to 4           0006: [email protected]([email protected],5i) = 0       end       for [email protected] = 0 to 7           0A9E: writefile [email protected] size 12 from [email protected]           0A9E: writefile [email protected] size 20 from [email protected]       end       0A9B: closefile [email protected]   endendgosub @GET_ADDRESS000E: [email protected] -= @TEMP_MEMORYfor [email protected] = 0 to 63   0A8C: write_memory [email protected] size 4 value 0 virtual_protect 0   000A: [email protected] += 4 endif0A9A: [email protected] = openfile "cleo/skin_o.sav" mode 0x6272  // IF and SETthen   0A9D: readfile [email protected] size 4 to [email protected]   if   0039:   [email protected] == 0x43010253   then       gosub @GET_ADDRESS       000E: [email protected] -= @TEMP_MEMORY       for [email protected] = 0 to 7           0A9D: readfile [email protected] size 12 to [email protected]           for [email protected] = 0 to 2               0A8C: write_memory [email protected] size 4 value [email protected]([email protected],5i) virtual_protect 0               000A: [email protected] += 4            end           0A9D: readfile [email protected] size 20 to [email protected]           for [email protected] = 0 to 4               0A8C: write_memory [email protected] size 4 value [email protected]([email protected],5i) virtual_protect 0               000A: [email protected] += 4            end       end   end   0A9B: closefile [email protected]

 

I think this would be a good way to save data to your own file without having it overwritten by other CLEO Scripts (if it actually happens confused.gif ).

That isn't Ryosukes own method, it's an additional opcode included with CLEO 3 for that purpose, I think... I kept having problems using that, anyway but I might try again as an alternate to CLEO Saves. I was doing it anyway for different parts of the mod but I wanted this part to be fairly simple.

 

 

If you want more vars then just use 0A92 to create a custom thread like gtasearcher said.

 

{$CLEO}thread 'THREAD'[email protected] == 1then goto @start1endif [email protected] == 2then goto @start2endif [email protected] == 3then goto @startend0A92: create_custom_thread "thread.cs" {with parameters} 10A92: create_custom_thread "thread.cs" {with parameters} 20A92: create_custom_thread "thread.cs" {with parameters} 30A93: end_custom_thread:start1// contents:start2// contents:start3// contents

 

You could also create a custom thread into .s files too. These are like subscripts linked to the main script so it gives you more vars to work with. The parameters for 0A92 are the vars from the main script that you want to import into the subscripts.

 

Hope this helps! smile.gif

 

Ahhh, that's how to start a new thread within the script!! Wuhay, I guess...

 

I'm assuming the new thread has a blank set of variables, unless I pass them when starting them, right?

 

Anyway, I'll go and mess around with stuff until it works tounge2.gif - Got to fix some bugs in the haggle bar.

Share this post


Link to post
Share on other sites
Adler

 

That isn't Ryosukes own method, it's an additional opcode included with CLEO 3 for that purpose, I think... I kept having problems using that, anyway but I might try again as an alternate to CLEO Saves. I was doing it anyway for different parts of the mod but I wanted this part to be fairly simple.

I think the opcodes were created for that purpose but Ryosuke's probably the only guy who ever used it. I can't really make sense of his method it's kind of confusing. confused.gif

 

 

I'm assuming the new thread has a blank set of variables, unless I pass them when starting them, right?

Yes that's true. If you use this:

 

0A92: create_custom_thread "custom_thread.s" [email protected] [email protected] [email protected]

 

It creates a seperate thread and imports the local vars [email protected] [email protected] and [email protected] Other than those vars the new thread will give you more local vars to use.

 

Another note: S files are the same as CS files except they are named with the .s extension. You can use either one but I like to use the .s extension so I know if they are subscripts. biggrin.gif

Share this post


Link to post
Share on other sites
Deji
Another note: S files are the same as CS files except they are named with the .s extension. You can use either one but I like to use the .s extension so I know if they are subscripts. biggrin.gif

I just use .cs scripts (or any other extension I want, really) and then put them in a subfolder. Saves having loads of .s scripts in the CLEO Folder which can get messy for the user smile.gif

 

 

I think the opcodes were created for that purpose but Ryosuke's probably the only guy who ever used it. I can't really make sense of his method it's kind of confusing. confused.gif

 

Well, you'd probably be glad to hear that after I finish up some releases of my mods, I'm going to be studying Direct Memory Access and Memory Addressing so I may post some tutorials on GTAGangstas. Or on my blog, hosted by the website.

 

Hopefully I'll be able to bring his professionalism of coding to the less intelligent english-speaking peoples lol.gif - I've got a few mods planned, if I do manage to learn wink.gif

Share this post


Link to post
Share on other sites
gtasearcher

@Alder: you explained Deji how to create a thread in an other script [.s/.cs]. But the if he wants multiple threads in 1 .cs/.s, then the file that is created must be THE SAME as the script's name smile.gif

Share this post


Link to post
Share on other sites
Deji
@Alder: you explained Deji how to create a thread in an other script [.s/.cs]. But the if he wants multiple threads in 1 .cs/.s, then the file that is created must be THE SAME as the script's name smile.gif

That's what he said...

 

 

{$CLEO}thread 'THREAD'[email protected] == 1then goto @start1endif [email protected] == 2then goto @start2endif [email protected] == 3then goto @startend0A92: create_custom_thread "thread.cs" {with parameters} 10A92: create_custom_thread "thread.cs" {with parameters} 20A92: create_custom_thread "thread.cs" {with parameters} 30A93: end_custom_thread:start1// contents:start2// contents:start3// contents

 

 

It creates the same thread itself (x3) and makes the value of [email protected] either 1, 2 or 3. Then the script checks which one it is and starts the brand new thread accordingly...

 

... Although, surely they would have to have their own name_thread, right? Otherwise it's the same thread running in 3 instances all doing different things... confused.gif

Share this post


Link to post
Share on other sites
Adler

 

That's what he said...

Actually that's what gtasearcher said. smile.gif

 

@Alder: you explained Deji how to create a thread in an other script [.s/.cs]. But the if he wants multiple threads in 1 .cs/.s, then the file that is created must be THE SAME as the script's name smile.gif

Oh I get it now. The method you described actually creates a new thread in the same file? wow.gif

So I was actually describing the other method then...

Share this post


Link to post
Share on other sites
muh linucs

Does CLEO have its own save files or are mod scripts merged to GTA saves?

Share this post


Link to post
Share on other sites
ZAZ

Yes, there's a CLEO_SAVES folder inside of Cleo folder to store several data of cleo scripts.
Basicly the existence of each cleoscript will be saved as well data of opcode 0AB3:

If following code is used in cleoscript: 0A95: enable_thread_saving
then the script state and the mathematical content of local variables are stored.
Script state means the loop in which the code is running when making savegame
look for example inside spoiler

 

{$CLEO .cs}thread 'THRDSAV' 0A95: [email protected] = 0while truewait 0repeatwait 003F0: enable_text_draw 1033E: text_draw  50.0  230.0 'GYM1_61' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 8// press [email protected] += 1repeatwait 003F0: enable_text_draw 1 033E: text_draw  50.0  230.0 'GYM1_62' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 9// press [email protected] += 1repeatwait 003F0: enable_text_draw 1 033E: text_draw  50.0  230.0 'GYM1_63' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 8// press [email protected] += 1end

the script shows text information,
by default it shows "level1" and the content of local var [email protected], which is 0 by default
by keypress Backspace 1 will be added to [email protected] and the code jumps into next loop, so it shows "level2" and 1
then press Tab to add one more to [email protected] and the code jumps into next loop, so it shows "level3" and 2
and so on...
... so press key to change the loop and the content of [email protected], then make a savegame
.. then press again key to change the loop and the content of [email protected] and make again another savegame

then load the savegame to see what the text message shows



Peds, cars, objects, other items are NOT stored in CLEO_SAVES
Global variables of main.scm are NOT stored in CLEO_SAVES

Attention:
All parked_car_generators, radar_icons, objects, pickups are stored in save files of GTA San Andreas User Files
Also if they're placed by cleo scripts
AND THE REFERNCE GET LOST,
THE CONNECTION TO THE SPAWN VARIABLE GET LOST, IT EXISTS ONLY FOR THAT SESSION WHEN IT WILL BE CREATED

Only the global variables of main.scm can hold the reference to parked_car_generators, radar_icons, objects, pickups
Take care: using global variables of main.scm can mess up the save file data and can cause bugs and crashes

Share this post


Link to post
Share on other sites
muh linucs

Yes, there's a CLEO_SAVES folder inside of Cleo folder to store several data of cleo scripts.

Basicly the existence of each cleoscript will be saved as well data of opcode 0AB3:

 

If following code is used in cleoscript: 0A95: enable_thread_saving

then the script state and the mathematical content of local variables are stored.

Script state means the loop in which the code is running when making savegame

look for example inside spoiler

 

 

{$CLEO .cs}thread 'THRDSAV' 0A95: [email protected] = 0while truewait 0repeatwait 003F0: enable_text_draw 1033E: text_draw  50.0  230.0 'GYM1_61' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 8// press [email protected] += 1repeatwait 003F0: enable_text_draw 1 033E: text_draw  50.0  230.0 'GYM1_62' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 9// press [email protected] += 1repeatwait 003F0: enable_text_draw 1 033E: text_draw  50.0  230.0 'GYM1_63' 045A: draw_text_1number 50.0 250.0 GXT 'NUMBER' number [email protected] 0AB0:   key_pressed 8// press [email protected] += 1end

the script shows text information,

by default it shows "level1" and the content of local var [email protected], which is 0 by default

by keypress Backspace 1 will be added to [email protected] and the code jumps into next loop, so it shows "level2" and 1

then press Tab to add one more to [email protected] and the code jumps into next loop, so it shows "level3" and 2

and so on...

... so press key to change the loop and the content of [email protected], then make a savegame

.. then press again key to change the loop and the content of [email protected] and make again another savegame

 

then load the savegame to see what the text message shows

 

 

 

Peds, cars, objects, other items are NOT stored in CLEO_SAVES

Global variables of main.scm are NOT stored in CLEO_SAVES

 

Attention:

All parked_car_generators, radar_icons, objects, pickups are stored in save files of GTA San Andreas User Files

Also if they're placed by cleo scripts

AND THE REFERNCE GET LOST,

THE CONNECTION TO THE SPAWN VARIABLE GET LOST, IT EXISTS ONLY FOR THAT SESSION WHEN IT WILL BE CREATED

 

Only the global variables of main.scm can hold the reference to parked_car_generators, radar_icons, objects, pickups

Take care: using global variables of main.scm can mess up the save file data and can cause bugs and crashes

Do you mean that only CLEO save data can be corrupted (I don't really care) or main GTA saves as well?

I will avoid CLEO mods with variable 0A95: enable_thread_saving from now on.

Edited by Binding of Isaac

Share this post


Link to post
Share on other sites
ZAZ

Do you mean that only CLEO save data can be corrupted?

No

or main GTA saves as well?

yes and also the current data pool of global variabels

I will avoid CLEO mods with variable 0A95: enable_thread_saving from now on.

no, you didn't understand, 0A95: enable_thread_saving is usefull for some cases

 

Troublemaker in cleoscripts are:

1. using global variables

(no problem is, if you check for a global var)

 

this can make trouble:

0107: $2670 = create_object #A51_JETDOOR at 268.664 1884.06 15.925

this not:

00D6: if 0038:   $SWEET_TOTAL_PASSED_MISSIONS == 0 004D: jf @SWEET_180

 

 

 

2. placements of parked_car_generators, radar_icons, objects, pickups

if you make savegame

(they will be stored inside GTA San Andreas User Files by internal ID's

by loading of such savegames, the placements will be done again

so you get duplicates of these items)

Share this post


Link to post
Share on other sites
lascha2nd

I would like if they delete cleo_save file, if there any save file inside cleo_save, my game will make problem (Like something not function) 😧

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • 1 User Currently Viewing
    0 members, 0 Anonymous, 1 Guest

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.