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").
Круто, но к сожалению, работает только если число отделено пробелами. Запись
0@ = Object.Create(#lc_sky04, -3500.0, 0.0, -50.0)
не "видит", пока число не отделено так:
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").
Круто, но к сожалению, работает только если число отделено пробелами. Запись
0@ = Object.Create(#lc_sky04, -3500.0, 0.0, -50.0)не "видит", пока число не отделено так:
0@ = 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 был любой пед?
{$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 был любой пед?{$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
{$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
А как тогда указать актёра-педа, в определённом скине (ну обычного бота в гта са, которые по улицам ходят)? Например:
{$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
05D9: AS_actor $PLAYER_CHAR run_to_actor $PLAYER_ACTOR timelimit -1 stop_within_radius 3.0
Этот опкод просто отвечает за выполнение анимации бега одного определённого актёра к другому и всё
А если ты хочешь заставить игру найти педа в определённом скине то вот вроде бы нужный опкод -
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
Ну вот допустим я написал такой скрипт:
{$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
Ну вот допустим я написал такой скрипт:
{$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
Ну вот допустим я написал такой скрипт:
{$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Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так ? Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.
А вот так работает -
{$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. В чём я ошибся?
{$CLEO} 0000: :1 wait 0 0A96: 0@ = actor $PLAYER_ACTOR struct 0A8E: 5@ = 10@ + 20 0A8E: 1@ = 0@ + 0x540 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. В чём я ошибся?
{$CLEO} 0000: :1 wait 0 0A96: 0@ = actor $PLAYER_ACTOR struct 0A8E: 5@ = 10@ + 20 0A8E: 1@ = 0@ + 0x540 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 раз понятнее и короче
{$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 это игрок (ты),
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" ничего не происходит. Просто нажимаю без прицеливания, то зависает игра.
{$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
Вот правильный вариант:
{$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:, а мне это нужно.
При создании педов использую такие опкоды:
$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