Не умничай.Можно, но он не работает.
Не умничай.Можно, но он не работает.
Клео-переворот авто, нужно выпилить строчку с ремонтом авто и оставить только переворот и изменить клавишу активации на * на нумпаде!
CLEO:// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013 {$CLEO .cs} //-------------MAIN--------------- 0000: NOP :NONAME_2 wait 0 if Player.Defined($PLAYER_CHAR) if Actor.Driving($PLAYER_ACTOR) else_jump @NONAME_2 1@ = Actor.CurrentCar($PLAYER_ACTOR) 0@ = 304543 if and Actor.InCar($PLAYER_ACTOR, 1@) &0(0@,1i) == 255 else_jump @NONAME_2 0A30: repair_car 1@ wait 0 if 01F4: car 1@ flipped else_jump @NONAME_137 07DB: set_car 1@ rotation_velocity_XYZ 0.0 1.0 0.0 through_center_of_mass Car.RemoveReferences(1@) jump @NONAME_2 :NONAME_137 wait 200 Car.RemoveReferences(1@) jump @NONAME_2
Добавил проверку на то, в зоне прорисовки ли авто, и перестало вылетатьНе умничай.
Хотя, если именно твой(или не твой) код, то вот:Поможет кто?
{$CLEO}
0000:
REPEAT
wait 0
UNTIL 0AFA: is_samp_available
WHILE TRUE
wait 0
IF AND
8B21: samp is_chat_opened
8B4C: samp is_dialog_active -1
0AB0: key_pressed 106
00DF: actor $PLAYER_ACTOR driving
THEN
1@ = actor.CurrentCar($PLAYER_ACTOR)
07DB: set_car 1@ rotation_velocity_XYZ 0.0 1.0 0.0 through_center_of_mass // Где 1.0 лучше поставь 1.5, чтобы чуть быстрее крутился
Car.RemoveReferences(1@)
END
END
{$CLEO}
{$INCLUDE SF}
0000:
0C6A: 31@ = create_custom_thread_at_label @LABEL
0BE3: raknet setup_incoming_rpc_hook @iRPC
REPEAT
wait 0
UNTIL 0AFA: is_samp_available
WHILE TRUE
wait 0
END
:LABEL
WHILE TRUE
wait 0
IF /* если что-то там... */
THEN
/* Остановить поток iRPC */
<code>
/* Воспроизвести поток iRPC*/
END
:iRPC
0BE5: raknet 9@ = get_hook_param 1
IF 9@ == 73
<code>
END
0BE0: raknet hook_ret TRUE
Стандартными зарегистрированными средствами - никак. Можешь ставить проверку с помощью bool'евой переменной.Как остановить хук, а потом продолжить его работу? Например:
Типо вот так?Стандартными зарегистрированными средствами - никак. Можешь ставить проверку с помощью bool'евой переменной.
{$CLEO}
{$INCLUDE SF}
0000:
0C6A: 31@ = create_custom_thread_at_label @LABEL
0BE3: raknet setup_incoming_rpc_hook @iRPC
REPEAT
wait 0
UNTIL 0AFA: is_samp_available
WHILE TRUE
wait 0
END
:LABEL
WHILE TRUE
wait 0
IF /* если что-то там... */
THEN
10@ = 1
<code>
10@ = 0
END
END
:iRPC
0BE5: raknet 9@ = get_hook_param 1
IF 9@ == 73
IF 8039: not 10@ == 1
<code>
END
END
0BE0: raknet hook_ret TRUE
Тип вот так:Типо вот так?
{$CLEO}
HEX
00 00
END
WHILE 8AFA: NOT SAMP_Loaded
0001: 0
END
0BE3: raknet setup_incoming_rpc_hook @iRPC
WHILE TRUE
0001: 0
IF 0ADC: test_cheat "123"
THEN 0B12: 0@ = 0@ XOR 1
END
END
:iRPC
IF 0039: 0@ == TRUE
THEN 0BE5: raknet 1@ = get_hook_param 1
IF 0039: 1@ == {iRPC ID}73
THEN // ...
END
END
0BE0: raknet hook_ret TRUE
Циклом for по строке до её размера и используя read/write memory опкоды получаешь/записываешь новое ASCII значение. Пробел - 32 (0x20).Как в стринговой переменной, заменить все определенные символы (например все пробелы) на другие символы?
{$CLEO}
0000:
REPEAT
0001: 0
UNTIL 0AFA:
0BB9: samp 0@ = get_pickup_pool_ptr
WHILE TRUE
0001: 0
FOR 1@ = 0 TO {MAX_PICKUPS}150 [STEP = 1]
IF 0B51: samp 2@ = pickup_handle_by_id 1@
THEN
0A90: 2@ = 1@ * 20
000A: 2@ += 61444
000A: 2@ += 0@ // stPickup
0A8D: 3@ = read_memory 2@ size 4 virtual_protect TRUE // iModelID
IF or
0039: 3@ == 3790 // ñþäà àéäè òûêâû è ïèêàïà 3790 - ðàêåòà 19135 - æåëòûé ïèêàï
0039: 3@ == 19135
THEN
0AD3: 10@v = FORMAT "/spick %i" {ID}1@ // вот тут что то не так идет || эта команда из клео который берет пикапы на расстоянии
0C8F: samp process_chat_input 10@
wait 1100
END
END
END
END
А если у меня два потока? Как перенести переменные из созданного потока в первый?Тип вот так:
CLEO:{$CLEO} HEX 00 00 END WHILE 8AFA: NOT SAMP_Loaded 0001: 0 END 0BE3: raknet setup_incoming_rpc_hook @iRPC WHILE TRUE 0001: 0 IF 0ADC: test_cheat "123" THEN 0B12: 0@ = 0@ XOR 1 END END :iRPC IF 0039: 0@ == TRUE THEN 0BE5: raknet 1@ = get_hook_param 1 IF 0039: 1@ == {iRPC ID}73 THEN // ... END END 0BE0: raknet hook_ret TRUE
Почему не работает кто понимает? Эта штук должна находить пикапы иконками 3790 19135 и брать их по ид используя другой клео скрипт, но
CLEO:{$CLEO} 0000: REPEAT 0001: 0 UNTIL 0AFA: 0BB9: samp 0@ = get_pickup_pool_ptr WHILE TRUE 0001: 0 FOR 1@ = 0 TO {MAX_PICKUPS}150 [STEP = 1] IF 0B51: samp 2@ = pickup_handle_by_id 1@ THEN 0A90: 2@ = 1@ * 20 000A: 2@ += 61444 000A: 2@ += 0@ // stPickup 0A8D: 3@ = read_memory 2@ size 4 virtual_protect TRUE // iModelID IF or 0039: 3@ == 3790 // ñþäà àéäè òûêâû è ïèêàïà 3790 - ðàêåòà 19135 - æåëòûé ïèêàï 0039: 3@ == 19135 THEN 0AD3: 10@v = FORMAT "/spick %i" {ID}1@ // вот тут что то не так идет || эта команда из клео который берет пикапы на расстоянии 0C8F: samp process_chat_input 10@ wait 1100 END END END END
0C6C: set_thread 0@ local_var 1@ = 2@А если у меня два потока? Как перенести переменные из созданного потока в первый?
Можно подробней, если не сложно? А то для меня это темный лес...Циклом for по строке до её размера и используя read/write memory опкоды получаешь/записываешь новое ASCII значение. Пробел - 32 (0x20).
Пример:Можно подробней, если не сложно? А то для меня это темный лес...
{$CLEO}
0AC6: 0@ = label @Buffer offset
WHILE TRUE
0001: 0
IF 0ADC: test_cheat "1"
THEN
0AF8: samp add_message_to_chat "Было: %s" color 0xFFFFFF | {str}0@ |
0C17: 1@ = strlen 0@
FOR 2@ = 0 TO 1@ [STEP = 1]
0A8E: 3@ = 0@ + 2@
0A8D: 4@ = read_memory 3@ size 1 virtual_protect TRUE
IF 0039: 4@ == {!}0x21
THEN
0A8C: write_memory 3@ size 1 value {.}0x2E virtual_protect TRUE
0AF8: samp add_message_to_chat "Стало: %s" color 0xFFFFFF | {str}0@ |
BREAK
END
END
END
END
:Buffer
HEX
"Hello World!" 00
END
0AB1: call_scm_func @ReplaceStringChar params 3 | {Str}0@ {CharToReplace}0x21 {NewChar}0x2E ||
:ReplaceStringChar
0AA7: call_function {__cdecl _strlen}0x826330 num_params 1 pop 1 | {const char *Str}0@ | {size_t}25@ |
FOR 26@ = 0 TO 25@ [STEP = 1]
0A8E: 27@ = 0@ + 26@
0A8D: 28@ = read_memory 27@ size 1 virtual_protect TRUE
IF 003B: 28@ == 1@
THEN 0A8C: write_memory 27@ size 1 value 2@ virtual_protect TRUE
END
END
0AB2: ret 0 ||
0AB1: call_scm_func @ReplaceStringChar params 3 | {Str}0@ {CharToReplace}0x21 {NewChar}0x2E ||
:ReplaceStringChar
0AA7: call_function {__cdecl _strlen}0x826330 num_params 1 pop 1 | {const char *Str}0@ | {size_t}25@ |
FOR 26@ = 0 TO 25@ [STEP = 1]
0A8E: 27@ = 0@ + 26@
0A8D: 28@ = read_memory 27@ size 1 virtual_protect TRUE
IF 003B: 28@ == 1@
THEN 0A8C: write_memory 27@ size 1 value 2@ virtual_protect TRUE
END
END
0AB2: ret 0 ||