#4776 04-03-2017 21:49

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Один вопрос

Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
FhVHspIm.png

http://cpp.sh/6pp4

Использование: скопировать код своего скрипта, запустить на выполнение ("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

#4777 05-03-2017 18:53

Shag
Registered: 29-03-2010
Posts: 147
Website

Re: Один вопрос

DK22Pac wrote:

Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.png

http://cpp.sh/6pp4

Использование: скопировать код своего скрипта, запустить на выполнение ("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

#4778 05-03-2017 19:17

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Один вопрос

Shag wrote:
DK22Pac wrote:

Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.png

http://cpp.sh/6pp4

Использование: скопировать код своего скрипта, запустить на выполнение ("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

#4779 06-03-2017 04:56

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

Проблема не в Sanny Builder вовсе, вы путаете клео-опкоды и стандартные опкоды. Да, переведя число с точкой в Hex можно обойти компиляцию, но дело в том что опкоды, которые обрабатывают такие числа, сделаны не Rockstar. Не забывайте об этом! В GTA 3 числа с точкой ограничены в размерах, так как они там всего лишь 2 байта. Попробуйте скомпилировать код с запредельными значениями, но со стандартными опкодами и увидите, что никакой разницы не будет, числа изменятся и превратятся в бред. НО возьмите например опкоды чтения в память и увидите что произойдет фокус. Но это из-за того что создатель клео так сделал. По идее в КЛЕО для GTA 3 надо было учесть этот момент. НО зачем? Здесь уже ничего не сделаешь. Это никак не изменить. Либо писать код так, что например с такого то опкода обрабатывать код как 4 байтный, но это по-моему стремновато.


I know everything and nothing...

Offline

#4780 06-03-2017 17:58

Shag
Registered: 29-03-2010
Posts: 147
Website

Re: Один вопрос

DK22Pac wrote:

PS Эта проблема не относится к Vice City, там float 4-байтный.

Воу, значит это всё-таки были мои косяки, лол.
Теперь мне нужна программа, которая пофиксит мои навыки скриптинга! grin

Offline

#4781 07-03-2017 10:01

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Допустим такую ситуацию:
На одном сервере САМП есть такая фигня, что когда взламываешь машину (и не только), то появляется окошко. Слева показывается одна стрелочка в какую-нибудь сторону(вверх, вниз, вправо, влево) . А справа за 2 секунды нужно нажать на такую же стрелочку, как и слева, но там их 4. Вот ВОПРОС: Можно ли с помощью Sanny Bilder 3 (клео) сделать так, чтобы он сам смотрел какая слева стрелка и справа такую же сам нажимал?

Offline

#4782 08-03-2017 08:44

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Хотел сделать простой скрипт. Когда прикасаешься к определённому педу (#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

#4783 08-03-2017 12:45

DimZet
Registered: 07-03-2017
Posts: 3
Website

Re: Один вопрос

mfisto wrote:

Проблема не в Sanny Builder вовсе, вы путаете клео-опкоды и стандартные опкоды.

Чувак почитай внимательнее пост №4787. Речь не о опкодах, а о значениях. Разницы нет какой опкод.
Гта3 поддерживает 4байт float, но прога компилирует в 2байт. И с одной стороны правильно делает потому как в оригинале все так.
Но когда значение (+-)2048.0 и выше приходится вручную переводить в хекс код 4 байт(0x45000000).
И помимо этого 2байт float не точный, из-за этого баги к примеру стену на стройке выпирает.
С этими пробелами столкнулся когда перенес карту СА в треху lol  и пытался точно разместить спрайты.

DK22Pac wrote:

Вот небольшая програмка, которая заменяет все "проблемные" float-числа на целые.
http://i.imgur.com/FhVHspIm.png
http://cpp.sh/6pp4
Использование: скопировать код своего скрипта, запустить на выполнение ("Run").

Спасибо.

ps: с десятой попытки зарегистрировался.

SliVka wrote:

Хотел сделать простой скрипт. Когда прикасаешься к определённому педу (#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

#4784 08-03-2017 12:55

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Один вопрос

SliVka, #FAM2 это не указатель на актёра, это просто id модели, это не должно же так работать

Offline

#4785 08-03-2017 17:01

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

А как тогда указать актёра-педа, в определённом скине (ну обычного бота в гта са, которые по улицам ходят)? Например:

{$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

#4786 08-03-2017 17:12

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Один вопрос

SliVka wrote:
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

#4787 08-03-2017 17:35

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Ну вот допустим я написал такой скрипт:

{$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

Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так cry ?  Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.

Offline

#4788 08-03-2017 17:48

DimZet
Registered: 07-03-2017
Posts: 3
Website

Re: Один вопрос

SliVka wrote:

Ну вот допустим я написал такой скрипт:

{$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

Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так cry ?  Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.

0611:         actor $PLAYER_ACTOR performing_animation "WALK_CIVI".

Offline

#4789 08-03-2017 18:29

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Один вопрос

SliVka wrote:

Ну вот допустим я написал такой скрипт:

{$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

Вот и почему "гта не отвечает",когда уже загрузила новую игру или сохранение?? НУ что не так cry ?  Видосы смотрю обучающие. Но руки уже чешутся что-нибудь написать.

А вот так работает -

{$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

#4790 09-03-2017 10:08

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Как я мог забыть. Это самый первый урок... Если actor, то всегда пишем $PLAYER_ACTOR, а если char, то $PLAYER_CHAR

Offline

#4791 09-03-2017 12:13

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Вот простой скрипт рабочий. Он автоматически восстанавливает хп до 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

#4792 09-03-2017 15:39

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Один вопрос

SliVka wrote:

Вот простой скрипт рабочий. Он автоматически восстанавливает хп до 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

#4793 13-03-2017 17:37

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

$PLAYER_CHAR   это все педы в зоне стрима? Или как?  А как узнать Handle педа? Если я буду иметь Handle педа, то смогу этому педу уменьшать здоровье и прочее благодаря изменения адреса памяти?

Offline

#4794 14-03-2017 04:08

Zin_869731
Registered: 29-12-2016
Posts: 13

Re: Один вопрос

SliVka wrote:

$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

#4795 02-04-2017 11:01

SliVka
Registered: 07-03-2017
Posts: 16

Re: Один вопрос

Помогите. Прицеливаюсь, тыкаю "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

#4796 03-04-2017 13:03

Mr.GeniusZ
Registered: 09-11-2014
Posts: 29

Re: Один вопрос

Вот правильный вариант:

{$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

#4797 17-05-2017 16:40

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Я создал педов для миссии, и почему-то на них не действует 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

#4798 18-05-2017 05:49

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

И ещё вопрос. Можно проверить, что актёр целится в игрока или атакует его?

Offline

#4799 18-05-2017 11:30

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

Опкод 0638 вроде применяется для тачки, а опкод 099f зачем используешь? Насчет целится в игрока итд. на форуме обсуждали давненько правда.


I know everything and nothing...

Offline

#4800 18-05-2017 19:14

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

mfisto wrote:

Опкод 0638 вроде применяется для тачки,

Не, для актёров. Проверено, работает как надо.

mfisto wrote:

а опкод 099f зачем используешь?

Он убирает ограничение в дальности стрельбы. У каждого оружия есть своя дистанция для выстрелов, и если актёр стоит слишком далеко от цели, он не стреляет. С этим опкодом дистанция не имеет значения.

Offline

Board footer

Powered by FluxBB