Вопросы по CLEO-скриптингу

Избранный

Новичок
198
30
Как сделать функцию смены слота оружия? ну суперган из собейта короч. (просто суперган из соба Гонщика в машине не работает, поэтому хочу свой сделать в клео)
вот что получилось сделать только, но оно как ни странно не работает, помогите плиз:
Код:
:Noname_2
wait 0
if
0AB0:  key_pressed 90
else_jump @Noname_2
 
:Noname_21
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 2
else_jump @Noname_89
0A8C: write_memory 1@ size 1 value 3 virtual_protect 0
jump @Noname_2
 
:Noname_89
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 3
else_jump @Noname_21
0A8C: write_memory 1@ size 1 value 2 virtual_protect 0
jump @Noname_2
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
Код:
{$CLEO}
if
not 29@ = samp.Base()
then
end_thread
end

repeat
wait 100
until samp.Available()

0B34: samp register_client_command "timelocal" to_label @GetTime

while true
wait 0
end

:GetTime
call @GetSystemTime 0 3@ 4@ 5@ 6@ 7@ 8@ 9@ 10@
message "%d %d %d %d %d %d %d %d" 0x000FFF 3@ 4@ 5@ 6@ 7@ 8@ 9@ 20@
samp.CmdRet()

:GetSystemTime
0AA2: 0@ = load_library "Cleo\kernel32.dll"
0AA4: 1@ = get_proc_address "GetSystemTime" library 0@
0AC8: 2@ = alloc mem 32
call 1@ params 1 pop 0 2@
0A8D: 3@ = read mem 2@ size 2 vp 1
2@ += 2
0A8D: 4@ = read mem 2@ size 2 vp 1 
2@ += 2
0A8D: 5@ = read mem 2@ size 2 vp 1
2@ += 2 
0A8D: 6@ = read mem 2@ size 2 vp 1
2@ += 2 
0A8D: 7@ = read mem 2@ size 2 vp 1
2@ += 2 
0A8D: 8@ = read mem 2@ size 2 vp 1
2@ += 2 
0A8D: 9@ = read mem 2@ size 2 vp 1
2@ += 2 
0A8D: 10@ = read mem 2@ size 2 vp 1
2@ -= 30
0AC9: free mem 2@
ret 8 3@ 4@ 5@ 6@ 7@ 8@ 9@ 10@
В чем ошибка?
 

Thomas_Johnson

Известный
Проверенный
183
21
Как сделать функцию смены слота оружия? ну суперган из собейта короч. (просто суперган из соба Гонщика в машине не работает, поэтому хочу свой сделать в клео)
вот что получилось сделать только, но оно как ни странно не работает, помогите плиз:
Код:
:Noname_2
wait 0
if
0AB0:  key_pressed 90
else_jump @Noname_2
 
:Noname_21
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 2
else_jump @Noname_89
0A8C: write_memory 1@ size 1 value 3 virtual_protect 0
jump @Noname_2
 
:Noname_89
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 3
else_jump @Noname_21
0A8C: write_memory 1@ size 1 value 2 virtual_protect 0
jump @Noname_2

Зачем тебе велосипед? Есть суперган на клео
Есть опкод на смену оружия
Код:
01B9: set_actor 2@ armed_weapon_to 0
 

Избранный

Новичок
198
30
Зачем тебе велосипед? Есть суперган на клео
Есть опкод на смену оружия
Код:
01B9: set_actor 2@ armed_weapon_to 0

тот суперган через этот опкод не такой, там все время прицел сбрасывается и в машине не работает он, не как в собейте кароч.
 

fonarik

Известный
206
3
Чем отличается функция отправки ложных координат для актера от машины?
 

Thomas_Johnson

Известный
Проверенный
183
21
Как сделать функцию смены слота оружия? ну суперган из собейта короч. (просто суперган из соба Гонщика в машине не работает, поэтому хочу свой сделать в клео)
вот что получилось сделать только, но оно как ни странно не работает, помогите плиз:
Код:
:Noname_2
wait 0
if
0AB0:  key_pressed 90
else_jump @Noname_2
 
:Noname_21
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 2
else_jump @Noname_89
0A8C: write_memory 1@ size 1 value 3 virtual_protect 0
jump @Noname_2
 
:Noname_89
wait 0
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x718
0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
if
  1@ == 3
else_jump @Noname_21
0A8C: write_memory 1@ size 1 value 2 virtual_protect 0
jump @Noname_2

Ладно, почему ты сканируешь на 2 и 3? Там обычные значения оружия: Desert Eagle: 24; Shotgun: 25
И почему записываешь не в 0@, а в 1@?
 

OWSLA

Новичок
32
0
Ребят, помогите доделать активацию на клавиши.
Чтобы один раз нажал - скрипт начал работу, во второй раз - завершил.

PHP:
{$CLEO}
 
0000: NOP
Thread "Buldozer"
 
var
0@ : integer
1@ : integer
30@ : integer
31@ : integer
32@ : integer
end
 
:start
wait 0
if and
  0AB0: key_precced 105 // np 9
  0AB0: key_precced 104 // np 8
jf @start
 
:Buldozer1
wait 0
Actor.StorePos($PLAYER_ACTOR, 10@, 11@, 12@) // Находит позицию игрока и записывает в 0, 1, 2
 
30@ = 5000.0 // Далность нахождения маркера
31@ = -1 // Номер блока ближайшего маркера
 
for 0@ = 0 to 32
1@ = 0@
1@ *= 56
1@ += 0xC7F158
0A8E: 2@ = 1@ + 16 // Нахождение X координаты
0A8D: 20@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 20 // Нахождение Y координаты
0A8D: 21@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 24 // Нахождение Z координаты
0A8D: 22@ = read_memory 2@ size 4 virtual_protect 0
0509: 32@ = distance_between_XY 10@ 11@ and_XY 20@ 21@
0A8E: 2@ = 1@ + 4
0A8D: 8@ = read_memory 2@ size 4 virtual_protect 0
 
if and
32@ < 30@
8@ <> 0
then
30@ = 32@
31@ = 0@
end
 
:End
wait 0
if
31@ <> -1
jf @End
1@ = 31@
1@ *= 56
1@ += 0xC7F158
0A8E: 2@ = 1@ + 16 // Нахождение X координаты
0A8D: 20@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 20 // Нахождение Y координаты
0A8D: 21@ = read_memory 2@ size 4 virtual_protect 0
0A8E: 2@ = 1@ + 24 // Нахождение Z координаты
0A8D: 22@ = read_memory 2@ size 4 virtual_protect 0
22@ -= 2.0
 
:Buldozer2
wait 0
Actor.PutAt($PLAYER_ACTOR, 20@, 21@, 22@)
jump @Buldozer3
 
:Buldozer3
wait 0
if and
  0AB0: key_precced 105 // np 9
  0AB0: key_precced 104 // np 8
jf @Buldozer3
jump @Buldozer1

В данном случае приходится зажимать комбинацию клавиш, чтобы скрипт работал.
(Поиск маркера -> ТП -> Поиск маркера -> ТП)
Очень неудобно.
 

Thomas_Johnson

Известный
Проверенный
183
21
Код:
{$CLEO}
0000:
while true
wait 0
if
0AB0:  key_pressed 90
then
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x740
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
    0AD1: show_formatted_text_highpriority "ID1: %d" time 2000 0x00ff00 1@
    wait 500
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x4F4
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
    0AD1: show_formatted_text_highpriority "ID2: %d" time 2000 0x00ff00 1@
    wait 500
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x718
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
    0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 0x00ff00 1@
end
end
Выводит одно и то же число, во всех трех случаях, вне зависимости от оружия - бред...
 

MogAika

Известный
Автор темы
Друг
237
441
Код:
{$CLEO}
0000:
while true
wait 0
if
0AB0:  key_pressed 90
then
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x740
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
    0AD1: show_formatted_text_highpriority "ID1: %d" time 2000 0x00ff00 1@
    wait 500
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x4F4
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
    0AD1: show_formatted_text_highpriority "ID2: %d" time 2000 0x00ff00 1@
    wait 500
    0A96: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x718
    0A8D: 1@ = read_memory 0@ size 1 virtual_protect 0
 
[CODE]0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 1@
//Ошибка - 0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 0x00ff00 1@
end
end[/code]
Выводит одно и то же число, во всех трех случаях, вне зависимости от оружия - бред...

Логично, ведь правильно:
Код:
0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 1@
//Ошибка: 0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 0x00ff00 1@
 

Thomas_Johnson

Известный
Проверенный
183
21
Логично, ведь правильно:
Код:
0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 1@
//Ошибка: 0AD1: show_formatted_text_highpriority "ID3: %d" time 2000 0x00ff00 1@

Черт, я привык, что цвет всегда стоит...
В итоге я пришел к началу, единственный адрес - это 0x718, но там ничего не меняется, соответственно оружие остается