- 2,696
- 1,469
В SB:0227: RANDOM_ACTOR_CAR_H = RANDOM_ACTOR_CAR
Сначала должен идти хендл, а потом хпExample 0227: get_car_health 22@ store_to 4@
Код:
0227: 4@ = car 22@ health
В SB:0227: RANDOM_ACTOR_CAR_H = RANDOM_ACTOR_CAR
Сначала должен идти хендл, а потом хпExample 0227: get_car_health 22@ store_to 4@
0227: 4@ = car 22@ health
{$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
Не получается сделать так, чтобы активация шла с нажатия кнопок и дальше не приходилось ничего делать.
(То есть нажал - скрипт начал свою работу. В данном случае, находить и ТПшить по маркерам).
В этом скрипте приходиться зажимать сочетание кнопок, что не очень удобно.
{$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
else_jump @start
wait 300
jump @Buldozer1
: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
if
gosub @check_cp
then
Actor.PutAt($PLAYER_ACTOR, 20@, 21@, 22@)
end
if
gosub @check_keys_off
then
wait 300
jump @start
end
end
jump @Buldozer1
:check_cp
if
31@ <> -1
then
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
0485: return_true
else
059A: return_false
end
return
:check_keys_off
if and
0AB0: key_precced 105 // np 9
0AB0: key_precced 104 // np 8
then
0485: return_true
else
059A: return_false
end
return
:cheat_actor_teleport
0A96: 4@ = actor 0@ struct
4@ += 20
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0
4@ += 48 // X
0A8C: write_memory 4@ size 4 value 1@ virtual_protect 0 // X
4@ += 4 // Y
0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0 // Y
4@ += 4 // Z
0A8C: write_memory 4@ size 4 value 3@ virtual_protect 0 // Z
ret 0
В цикле получаешь хендлы всех игроков через id (1-1000) проверяешь существование игрока по хендлу (те что в радиусе прорисовки), затем проверять их в радисе и увеличивать его на маленькие интервалы (от 0) до нужного радиуса, если проверка верна, то это будет ближайший игрок.Как найти хендл ближайшего игрока в определенном радиусе?
Как получить координаты машины/телепортировать машину с помощью "изменения" её структуры?
Пример для "актера"(от FYP):
Код::cheat_actor_teleport 0A96: 4@ = actor 0@ struct 4@ += 20 0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 4@ += 48 // X 0A8C: write_memory 4@ size 4 value 1@ virtual_protect 0 // X 4@ += 4 // Y 0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0 // Y 4@ += 4 // Z 0A8C: write_memory 4@ size 4 value 3@ virtual_protect 0 // Z ret 0
Как узнать ид текущего диалога? Раньше видел что-то, но не обращал внимание, не интересуюсь диалогами, а сейчас не могу найти
0B4E: samp 0@ = get_current_dialog_id
FYP написал(а):0B4E: samp 0@ = get_current_dialog_id // Возвращает ИД текущего диалога // Выходные данные: 0@ - ИД диалога.
Объясните, пожалуйста, что такое хендл пикапа? Либо ткните в статью.
Хендл - это структура в которой хранятся все данные об пикапе. Как-то так.Объясните, пожалуйста, что такое хендл пикапа? Либо ткните в статью.