You are not logged in.
Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
Использование: скопировать код своего скрипта, запустить на выполнение ("Run").
Last edited by DK22Pac (04-03-2017 22:32)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.pngИспользование: скопировать код своего скрипта, запустить на выполнение ("Run").
Круто, но к сожалению, работает только если число отделено пробелами. Запись
1 | 0@ = Object.Create( #lc_sky04 , -3500.0, 0.0, -50.0) |
не "видит", пока число не отделено так:
1 | 0@ = Object.Create( #lc_sky04 , - 3500.0 , 0.0, -50.0) |
Но в любом случае, это "костыль": тут необходимо обновление SB. Я тут поковырял некоторые свои скрипты и прифигел от кол-ва "запредельных" float, что я юзал, но теперь знаю, откуда появлялись глюки. К примеру - понимаю, что массивный скрипт "облаков" работал лишь каким-то чудом и "на соплях", ибо там куча моментов использования float>2048.0, но в то же время теперь я знаю, как сделать всё по первоначальной задумке, подтерев все "сопли".
Last edited by Shag (05-03-2017 19:00)
Offline
DK22Pac wrote:Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.pngИспользование: скопировать код своего скрипта, запустить на выполнение ("Run").
Круто, но к сожалению, работает только если число отделено пробелами. Запись
10@
= Object.Create(
#lc_sky04
, -3500.0, 0.0, -50.0)
не "видит", пока число не отделено так:
10@
= Object.Create(
#lc_sky04
, -
3500.0
, 0.0, -50.0)
Спасибо, поправил.
http://cpp.sh/4bpp
PS Эта проблема не относится к Vice City, там float 4-байтный.
Last edited by DK22Pac (05-03-2017 19:25)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Проблема не в Sanny Builder вовсе, вы путаете клео-опкоды и стандартные опкоды. Да, переведя число с точкой в Hex можно обойти компиляцию, но дело в том что опкоды, которые обрабатывают такие числа, сделаны не Rockstar. Не забывайте об этом! В GTA 3 числа с точкой ограничены в размерах, так как они там всего лишь 2 байта. Попробуйте скомпилировать код с запредельными значениями, но со стандартными опкодами и увидите, что никакой разницы не будет, числа изменятся и превратятся в бред. НО возьмите например опкоды чтения в память и увидите что произойдет фокус. Но это из-за того что создатель клео так сделал. По идее в КЛЕО для GTA 3 надо было учесть этот момент. НО зачем? Здесь уже ничего не сделаешь. Это никак не изменить. Либо писать код так, что например с такого то опкода обрабатывать код как 4 байтный, но это по-моему стремновато.
I know everything and nothing...
Offline
Допустим такую ситуацию:
На одном сервере САМП есть такая фигня, что когда взламываешь машину (и не только), то появляется окошко. Слева показывается одна стрелочка в какую-нибудь сторону(вверх, вниз, вправо, влево) . А справа за 2 секунды нужно нажать на такую же стрелочку, как и слева, но там их 4. Вот ВОПРОС: Можно ли с помощью Sanny Bilder 3 (клео) сделать так, чтобы он сам смотрел какая слева стрелка и справа такую же сам нажимал?
Offline
Хотел сделать простой скрипт. Когда прикасаешься к определённому педу (#FAM2, это из банды грув), то ему даётся розыск.
Но при загрузке Новой игры или сохранения ГТА СА "Не отвечает".
1) Что делать?
2) Как указать так, чтобы вместо #FAM2 был любой пед?
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: create_thread @1 :1 0001: wait 0 if 0A1B: actor $PLAYER_ACTOR colliding_with_actor #FAM2 jf @1 010D: set player #FAM2 wanted level to 4 jf @1 |
Offline
Проблема не в Sanny Builder вовсе, вы путаете клео-опкоды и стандартные опкоды.
Чувак почитай внимательнее пост №4787. Речь не о опкодах, а о значениях. Разницы нет какой опкод.
Гта3 поддерживает 4байт float, но прога компилирует в 2байт. И с одной стороны правильно делает потому как в оригинале все так.
Но когда значение (+-)2048.0 и выше приходится вручную переводить в хекс код 4 байт(0x45000000).
И помимо этого 2байт float не точный, из-за этого баги к примеру стену на стройке выпирает.
С этими пробелами столкнулся когда перенес карту СА в треху и пытался точно разместить спрайты.
Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.png
http://cpp.sh/6pp4
Использование: скопировать код своего скрипта, запустить на выполнение ("Run").
Спасибо.
ps: с десятой попытки зарегистрировался.
Хотел сделать простой скрипт. Когда прикасаешься к определённому педу (#FAM2, это из банды грув), то ему даётся розыск.
Но при загрузке Новой игры или сохранения ГТА СА "Не отвечает".
1) Что делать?
2) Как указать так, чтобы вместо #FAM2 был любой пед?
12345678910{
$CLEO
}
0000:
create_thread
@1
:1
0001:
wait
0
if
0A1B: actor
$PLAYER_ACTOR
colliding_with_actor
#FAM2
jf
@1
010D: set player
#FAM2
wanted level to
4
jf
@1
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: create_thread @1 :1 0001: wait 0 if 0A1B: actor $PLAYER_ACTOR colliding_with_actor #FAM2 jf @1 010D: set player #FAM2 wanted level to 4 < вместо #FAM2 $PLAYER_CHAR jf @1 < по моему ошибка в этом . Нужно jump @1 |
Я в СА плохо разбираюсь, но опкод 010D дает уровень розыска игроку. А педу 09B6. И для педа нужно узнать его переменную.
Еще вопрос. В CLEO SA есть опкоды поиска объектов, машин и педов. А есть поиск пикапов в радиусе игрока?
Для гта3 и вайса опкод поиска объектов работает и с пикапами.
Last edited by DimZet (08-03-2017 13:01)
Offline
SliVka, #FAM2 это не указатель на актёра, это просто id модели, это не должно же так работать
Offline
А как тогда указать актёра-педа, в определённом скине (ну обычного бота в гта са, которые по улицам ходят)? Например:
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: create_thread @1 :1 wait 0 if 0AB0: key_pressed 111 jf @1 05D9: AS_actor $PLAYER_CHAR run_to_actor $PLAYER_ACTOR timelimit - 1 stop_within_radius 3.0 jump @1 |
этот скрипт должен был заставить бежать педов ко мне, но "ГТА не отвечает".
Offline
105D9: AS_actor
$PLAYER_CHAR
run_to_actor
$PLAYER_ACTOR
timelimit -
1
stop_within_radius 3.0
Этот опкод просто отвечает за выполнение анимации бега одного определённого актёра к другому и всё
А если ты хочешь заставить игру найти педа в определённом скине то вот вроде бы нужный опкод -
1 | 091C: get_actor_in_sphere $TEMPVAR_FLOAT_X $TEMPVAR_FLOAT_Y $TEMPVAR_FLOAT_Z radius 1.5 model #FAM2 external_script_named "PEDSLOT" handle_as 1@ |
Где 1@ и есть указатель на этого педа
Мне кажется тебе не мешало бы посмотреть немного уроков по CLEO скриптингу, что тут и как делается.
Offline
Ну вот допустим я написал такой скрипт:
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: create_thread @1 :1 0001: wait 0 if 0611: actor $PLAYER_CHAR performing_animation "WALK_CIVI" jf @1 010D: set_player $PLAYER_CHAR wanted_level_to 6 jump @1 |
Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так ? Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.
Offline
Ну вот допустим я написал такой скрипт:
12345678910{
$CLEO
}
0000:
create_thread
@1
:1
0001:
wait
0
if
0611: actor
$PLAYER_CHAR
performing_animation
"WALK_CIVI"
jf
@1
010D: set_player
$PLAYER_CHAR
wanted_level_to
6
jump
@1
Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так
? Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.
0611: actor $PLAYER_ACTOR performing_animation "WALK_CIVI".
Offline
Ну вот допустим я написал такой скрипт:
12345678910{
$CLEO
}
0000:
create_thread
@1
:1
0001:
wait
0
if
0611: actor
$PLAYER_CHAR
performing_animation
"WALK_CIVI"
jf
@1
010D: set_player
$PLAYER_CHAR
wanted_level_to
6
jump
@1
Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так
? Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.
А вот так работает -
1 2 3 4 5 6 7 8 9 10 | { $CLEO } 0000: :1 0001: wait 0 if 0611: actor $PLAYER_ACTOR performing_animation "WALK_PLAYER" jf @1 01F0: set_max_wanted_level_to 6 010D: set_player $PLAYER_CHAR wanted_level_to 6 jump @1 |
(ну я бы не сказал что работает стабильно, но всё же работает)0 )
Ну тут фишка в чём
Если в опкоде написано player_, то используй переменную $PLAYER_CHAR
А если написано actor_, то используй $PLAYER_ACTOR
Last edited by Zin_869731 (08-03-2017 18:35)
Offline
Как я мог забыть. Это самый первый урок... Если actor, то всегда пишем $PLAYER_ACTOR, а если char, то $PLAYER_CHAR
Offline
Вот простой скрипт рабочий. Он автоматически восстанавливает хп до 100 (на деле), несмотря сколько хп у актёра (меня), хоть 99. А хотел я чтобы он восстанавливать ТОЛЬКО , когда хп ниже 20. В чём я ошибся?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | { $CLEO } 0000: :1 wait 0 0A96: 0@ = actor $PLAYER_ACTOR struct 0A8E: 5@ = 10@ + 20 0A8E: 1@ = 0@ + 0x 540 repeat wait 0 if 002D: 1@ >= 5@ then 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 1 0A8C: write_memory 1@ size 4 value 100.0 virtual_protect 1 end jump @1 until Actor.Dead( $PLAYER_ACTOR ) |
Offline
Вот простой скрипт рабочий. Он автоматически восстанавливает хп до 100 (на деле), несмотря сколько хп у актёра (меня), хоть 99. А хотел я чтобы он восстанавливать ТОЛЬКО , когда хп ниже 20. В чём я ошибся?
123456789101112131415161718{
$CLEO
}
0000:
:1
wait
0
0A96:
0@
= actor
$PLAYER_ACTOR
struct
0A8E:
5@
=
10@
+
20
0A8E:
1@
=
0@
+ 0x
540
repeat
wait
0
if
002D:
1@
>=
5@
then
0A8D:
2@
= read_memory
1@
size
4
virtual_protect
1
0A8C: write_memory
1@
size
4
value
100.0
virtual_protect
1
end
jump
@1
until
Actor.Dead(
$PLAYER_ACTOR
)
Не пойму зачем всё так усложнять, ведь это можно реализовать с помощью стандартных опкодов, получится в 100 раз понятнее и короче
1 2 3 4 5 6 7 8 9 10 11 12 13 | { $CLEO } 0000: :MAIN while true wait 0 0226: 1@ = actor $PLAYER_ACTOR health if 001B: 20 > 1@ then 0223: set_actor $PLAYER_ACTOR health_to 100 end end |
Offline
$PLAYER_CHAR это все педы в зоне стрима? Или как? А как узнать Handle педа? Если я буду иметь Handle педа, то смогу этому педу уменьшать здоровье и прочее благодаря изменения адреса памяти?
Offline
$PLAYER_CHAR это все педы в зоне стрима? Или как? А как узнать Handle педа? Если я буду иметь Handle педа, то смогу этому педу уменьшать здоровье и прочее благодаря изменения адреса памяти?
Нет, $PLAYER_CHAR это игрок (ты),
1 2 | 0AD2: 1@ = player $PLAYER_CHAR targeted_actor // 1@ = пед, на которого нацелился игрок 08E5: get_actor_in_sphere 27@ 28@ 29@ radius 50.0 handle_as 0@ // 0@ = любой пед, который находится в заданной сфере |
Насчёт второго немного не уверен правда
Можешь делать с ними что хочешь
Last edited by Zin_869731 (14-03-2017 04:09)
Offline
Помогите. Прицеливаюсь, тыкаю "1" ничего не происходит. Просто нажимаю без прицеливания, то зависает игра.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { $CLEO } 0000: :1 wait 0 Model.Load( #FAM2 ) 038B: load_all_models_now :2 wait 0 0AD2: 1@ = player $PLAYER_CHAR targeted_actor if and 0256: player 1@ defined 0AB0: key_pressed 49 jf @2 09C7: change_player 1@ model_to #FAM2 jump @2 |
Last edited by SliVka (02-04-2017 11:03)
Offline
Вот правильный вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | { $CLEO } 0000: while true wait 0 0AD2: 0@ = player $PLAYER_CHAR targeted_actor if and 0AB0: key_pressed 49 056D: actor 0@ defined then Model.Load( #FAM2 ) 038B: load_requested_models 09C7: change_player $PLAYER_CHAR model_to #FAM2 Model.Destroy( #FAM2 ) end end |
Кстати, опкод 09C7 действует только на игрока, так что на педах он не будет работать.
Offline
Я создал педов для миссии, и почему-то на них не действует headshot. Они умирают от выстрела в голову, но сама голова остаётся на месте. Меня бы это устроило, но проблема в том, что не срабатывает проверка 09A8:, а мне это нужно.
При создании педов использую такие опкоды:
1 2 3 4 5 6 7 8 9 10 11 12 | $GUARD_1 = Actor.Create(Mission1, #BMYBOUN , -2634.5, 1408.329, 906.4609) Actor.Angle( $GUARD_1 ) = 90.5344 0245: set_actor $GUARD_1 walk_style_to "PLAYER" 060B: set_actor $GUARD_1 decision_maker_to 32 07FE: set_actor $GUARD_1 fighting_style_to 7 6 01B2: give_actor $GUARD_1 weapon 24 ammo 500 // Load the weapon model before using this 0860: link_actor $GUARD_1 to_interior 3 06AB: set_actor $GUARD_1 all_weapons_hidden 1 0638: AS_actor $GUARD_1 stay_put 1 Actor.WeaponAccuracy( $GUARD_1 ) = 85 099F: unknown_actor $GUARD_1 flag 1 077A: set_actor $GUARD_1 acquaintance 3 to_actors_pedtype 0 // see ped.dat |
Вроде ничего не должно влиять на иммунитет от headshotа. Если тут ничего не исправить, то можно ли как-то по-другому проверить, что был убит выстрелом в голову?
Offline
Опкод 0638 вроде применяется для тачки,
Не, для актёров. Проверено, работает как надо.
а опкод 099f зачем используешь?
Он убирает ограничение в дальности стрельбы. У каждого оружия есть своя дистанция для выстрелов, и если актёр стоит слишком далеко от цели, он не стреляет. С этим опкодом дистанция не имеет значения.
Offline