Diegoti Posted May 6, 2018 Share Posted May 6, 2018 (edited) Code .cs {$CLEO .cs}//-------------MAIN---------------0000: NOP 0570: [email protected] = create_asset_radar_marker_with_icon 52 at -1872.4995 -218.2075 18.375Model.Load(#PEREN):startwait 0 if and0AB0: key_pressed 51 0AB0: key_pressed 6600FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1872.4995 -218.2075 18.375 radius 3.0 3.0 3.0else_jump @start wait 0if010F: player $PLAYER_CHAR wanted_level > 0jf @wl1jump @go:wl1Player.Money($PLAYER_CHAR) += [email protected] = Car.Create(#PEREN, -1885.355, -208.8602, 23.0923)Car.Angle([email protected]) = 270.0:gowait 1000jump @start It spawn a car when press 1+b it that are and it correctly but i want to add more (2+b or 3+b) in the same script i just need someone add 2 more X+b and ill see how to do it be my self in a future. Please help and thanks Edited May 6, 2018 by Diegoti Link to comment Share on other sites More sharing options...
Sloth- Posted May 7, 2018 Share Posted May 7, 2018 (edited) First of all.Without making any changes in your script logic, i rewrote it in order to be more readable and understandable:Take a look: {$CLEO .cs}//-------------MAIN---------------thread 'Script' // you can replace "0000: nop" instructions by naming thread instructions, it makes code more elegant and after decompiling (you really don't need to decompile your scripts) labels will decompile as "YourThreadNames_X" instead of simply "NONAME_X"0570: [email protected] = create_asset_radar_marker_with_icon 52 at -1872.4995 -218.2075 18.375Model.Load(#PEREN)while true repeat wait 0 until 0AB0: key_pressed 51 and 0AB0: key_pressed 66 and 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1872.4995 -218.2075 18.375 radius 3.0 3.0 3.0 if 810F: not player $PLAYER_CHAR wanted_level > 0 then Player.Money($PLAYER_CHAR) += -10 [email protected] = Car.Create(#PEREN, -1885.355, -208.8602, 23.0923) Car.Angle([email protected]) = 270.0 end wait 1000end As general tip, always use high level syntax instead of low level syntax. Using Labels and jump instructions to labels is a headache you can avoid completely by using high level. Did you notice i didn't need a single label in the code? Of course you will need labels mandatory when creating subroutines: {$CLEO .cs}thread 'ExampleScript'gosub @MySubroutine0A93: end_custom_thread//==============:MySubroutineif [email protected] == 0then // Do somethingelse // Do other stuffendreturn You can read more about high level SCM coding here. Or simply consult Sanny Builder Help Sections.Now to your question:I'm not sure what exactly do you want to do but i think something like this: {$CLEO .cs}//-------------MAIN---------------thread 'Script'0570: [email protected] = create_asset_radar_marker_with_icon 52 at -1872.4995 -218.2075 18.375Model.Load(#PEREN)// Load other modelswhile true wait 0 if 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1872.4995 -218.2075 18.375 radius 3.0 3.0 3.0 then if 810F: not player $PLAYER_CHAR wanted_level > 0 then if 010A: player $PLAYER_CHAR money > 10 then if 0AB0: key_pressed 66 // Key B then if 0AB0: key_pressed 0x31 // Key 1 then [email protected]=#PEREN gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end if 0AB0: key_pressed 0x32 // Key 2 then [email protected]=#PEREN // Put other model here gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end if 0AB0: key_pressed 0x33 // Key 3 then [email protected]=#PEREN // Put other model here gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end end else 0ACC: show_text_lowpriority "~r~You don't have enough money!" time 4000 end else 0ACC: show_text_lowpriority "~r~Lose your Wanted Level first!" time 4000 end endend:DestroyCarif 056E: car [email protected] definedthen 00A6: destroy_car [email protected]:TakeMoney_And_CreateCarPlayer.Money($PLAYER_CHAR) += [email protected] = Car.Create([email protected], -1885.355, -208.8602, 23.0923)Car.Angle([email protected]) = 270.0return Be careful when you want to do stuff when pressing two keys at the same time, if you check presses like this:if andkeypressed key1keypressed key2then // Do actionendGame will not behave as expected, but will validate the condition with only key1 pressing!A question you may ask when you are starting to learn SCM: "How can i know which opcode is the best to solve this particular problem?"The answer is: use Sanny Builder opcodes search, and use keywords.Most common keywords are: actor, car, sphere, marker, path, AS (for animations), remove, destroy, create, release, load, checkpoint, particle, camera.Study different opcodes, do experiments, read main.scm (specially when you want to know how to achieve something the game do in a particular mission). Watch missions walkthrough, it can give you interesting ideas about stuff to make.If you find an opcode don't know how to use it (its use is not intuitive), here are your options:1. Google search: "opcode XXXX". You'll always find a gta-dedicated page with documented opcodes.2. If 1 doesn't help, search the opcode in main.scm decompiled, and see how they use it. 3. If previous doesn't help, you can always ask in the forums of course If you are struggling to understand all of this, you should consider reading SCM tutorials and understand the most basic principles. Hope it helps! Edited May 7, 2018 by Sloth- Link to comment Share on other sites More sharing options...
Diegoti Posted May 7, 2018 Author Share Posted May 7, 2018 First of all. Without making any changes in your script logic, i rewrote it in order to be more readable and understandable: Take a look: {$CLEO .cs}//-------------MAIN---------------thread 'Script' // you can replace "0000: nop" instructions by naming thread instructions, it makes code more elegant and after decompiling (you really don't need to decompile your scripts) labels will decompile as "YourThreadNames_X" instead of simply "NONAME_X"0570: [email protected] = create_asset_radar_marker_with_icon 52 at -1872.4995 -218.2075 18.375Model.Load(#PEREN)while true repeat wait 0 until 0AB0: key_pressed 51 and 0AB0: key_pressed 66 and 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1872.4995 -218.2075 18.375 radius 3.0 3.0 3.0 if 810F: not player $PLAYER_CHAR wanted_level > 0 then Player.Money($PLAYER_CHAR) += -10 [email protected] = Car.Create(#PEREN, -1885.355, -208.8602, 23.0923) Car.Angle([email protected]) = 270.0 end wait 1000end As general tip, always use high level syntax instead of low level syntax. Using Labels and jump instructions to labels is a headache you can avoid completely by using high level. Did you notice i didn't need a single label in the code? Of course you will need labels mandatory when creating subroutines: {$CLEO .cs}thread 'ExampleScript'gosub @MySubroutine0A93: end_custom_thread//==============:MySubroutineif [email protected] == 0then // Do somethingelse // Do other stuffendreturn You can read more about high level SCM coding here. Or simply consult Sanny Builder Help Sections. Now to your question: I'm not sure what exactly do you want to do but i think something like this: {$CLEO .cs}//-------------MAIN---------------thread 'Script'0570: [email protected] = create_asset_radar_marker_with_icon 52 at -1872.4995 -218.2075 18.375Model.Load(#PEREN)// Load other modelswhile true wait 0 if 00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1872.4995 -218.2075 18.375 radius 3.0 3.0 3.0 then if 810F: not player $PLAYER_CHAR wanted_level > 0 then if 010A: player $PLAYER_CHAR money > 10 then if 0AB0: key_pressed 66 // Key B then if 0AB0: key_pressed 0x31 // Key 1 then [email protected]=#PEREN gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end if 0AB0: key_pressed 0x32 // Key 2 then [email protected]=#PEREN // Put other model here gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end if 0AB0: key_pressed 0x33 // Key 3 then [email protected]=#PEREN // Put other model here gosub @DestroyCar gosub @TakeMoney_And_CreateCar wait 1000 end end else 0ACC: show_text_lowpriority "~r~You don't have enough money!" time 4000 end else 0ACC: show_text_lowpriority "~r~Lose your Wanted Level first!" time 4000 end endend:DestroyCarif 056E: car [email protected] definedthen 00A6: destroy_car [email protected]:TakeMoney_And_CreateCarPlayer.Money($PLAYER_CHAR) += [email protected] = Car.Create([email protected], -1885.355, -208.8602, 23.0923)Car.Angle([email protected]) = 270.0return Be careful when you want to do stuff when pressing two keys at the same time, if you check presses like this: if and keypressed key1 keypressed key2 then // Do action end Game will not behave as expected, but will validate the condition with only key1 pressing! A question you may ask when you are starting to learn SCM: "How can i know which opcode is the best to solve this particular problem?" The answer is: use Sanny Builder opcodes search, and use keywords. Most common keywords are: actor, car, sphere, marker, path, AS (for animations), remove, destroy, create, release, load, checkpoint, particle, camera. Study different opcodes, do experiments, read main.scm (specially when you want to know how to achieve something the game do in a particular mission). Watch missions walkthrough, it can give you interesting ideas about stuff to make. If you find an opcode don't know how to use it (its use is not intuitive), here are your options: 1. Google search: "opcode XXXX". You'll always find a gta-dedicated page with documented opcodes. 2. If 1 doesn't help, search the opcode in main.scm decompiled, and see how they use it. 3. If previous doesn't help, you can always ask in the forums of course If you are struggling to understand all of this, you should consider reading SCM tutorials and understand the most basic principles. Hope it helps! Best answer of all times Link to comment 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