You are not logged in.
Работает. Вот часть кода моего нового HUD'а, я там сделал спидометр в виде полосы в правом нижнем углу.
while true wait 0 05E0: 0@ = read_memory 0x6FAD68 size 1 virtual_protect 0 if and 0@ <> 1 816B: not fading player.Defined($PLAYER_CHAR) 16@ > 3000 then if 00E0: player $PLAYER_CHAR driving then 03C1: 0@ = player $PLAYER_CHAR car 02E3: 1@ = car 0@ speed car.RemoveReferences(0@) 1@ *= 3.6 if 00E1: key_pressed 0 14 then 2@ = 0 else 2@ = 255 end 3@ = 180.0 0063: 3@ -= 1@ 3@ += 1075.0 05E0: 6@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 6@ = integer_to_float 6@ 6@ *= 1002.0 6@ /= 1024.0 05E0: 7@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 7@ = integer_to_float 7@ 006B: 7@ *= 3@ 7@ /= 1280.0 05E0: 8@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 8@ = integer_to_float 8@ 8@ *= 7.0 8@ /= 1024.0 05E0: 9@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 9@ = integer_to_float 9@ 006B: 9@ *= 1@ 9@ /= 1280.0 038E: draw_box_position 7@ 6@ size 9@ 8@ RGBA 255 2@ 2@ 30 end 035F: set_actor $player_actor armour_to 100 03F0: enable_text_draw 1 05E6: 1@ = actor $player_actor struct inc(1@, 0x2C0) 05E0: 2@ = read_memory 1@ size 4 virtual_protect 0 if 2@ >= 100.0 then 2@ = 180.0 3@ = 740.0 else 2@ *= 180.0 2@ /= 100.0 3@ = 180.0 0063: 3@ -= 2@ 3@ += 740.0 end inc(1@, 4) 05E0: 4@ = read_memory 1@ size 4 virtual_protect 0 if 4@ >= 100.0 then 4@ = 180.0 5@ = 740.0 else 4@ *= 180.0 4@ /= 100.0 5@ = 180.0 0063: 5@ -= 4@ 5@ += 740.0 end if 2@ > 0.0 then 05E0: 6@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 6@ = integer_to_float 6@ 6@ *= 235.0 6@ /= 1280.0 05E0: 7@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 7@ = integer_to_float 7@ 006B: 7@ *= 3@ 7@ /= 1024.0 05E0: 8@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 8@ = integer_to_float 8@ 8@ *= 7.0 8@ /= 1280.0 05E0: 9@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 9@ = integer_to_float 9@ 006B: 9@ *= 2@ 9@ /= 1024.0 038E: draw_box_position 6@ 7@ size 8@ 9@ RGBA 173 0 0 100 end if 4@ > 0.0 then 05E0: 6@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 6@ = integer_to_float 6@ 6@ *= 244.0 6@ /= 1280.0 05E0: 7@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 7@ = integer_to_float 7@ 006B: 7@ *= 5@ 7@ /= 1024.0 05E0: 8@ = read_memory 0x8F4364 size 4 virtual_protect 1 008D: 8@ = integer_to_float 8@ 8@ *= 7.0 8@ /= 1280.0 05E0: 9@ = read_memory 0x8F4368 size 4 virtual_protect 1 008D: 9@ = integer_to_float 9@ 006B: 9@ *= 4@ 9@ /= 1024.0 038E: draw_box_position 6@ 7@ size 8@ 9@ RGBA 20 0 148 100 end end end
Last edited by DK22Pac (08-05-2011 22:25)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
03C1: 0@ = player $PLAYER_CHAR car 02E3: 1@ = car 0@ speed car.RemoveReferences(0@)
А car.RemoveReferences обязательно делать здесь ?
Offline
Сделал остров для трехи, сделал собственную зону, прописал в main.scm, все работает нормально, появляется название острова, при пересечении границы... Но не знаю как это изобразить в клео, чтобы оставить main.scm родной. Может кто поможет? Так это выглядит в main.scm:
015C: set_zone_gang_info "ISL_HAP" 1 (day) 10 0 0 0 0 0 0 0 0 015C: set_zone_gang_info "ISL_HAP" 0 (night) 8 0 0 0 0 0 0 0 0 0152: set_zone_car_info "ISL_HAP" 1 (day) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0152: set_zone_car_info "ISL_HAP" 0 (night) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0324: set_zone_pedgroup_info "ISL_HAP" 1 (day) 29 0324: set_zone_pedgroup_info "ISL_HAP" 0 (night) 30
Offline
{$CLEO} 015C: set_zone_gang_info "ISL_HAP" 1 (day) 10 0 0 0 0 0 0 0 0 015C: set_zone_gang_info "ISL_HAP" 0 (night) 8 0 0 0 0 0 0 0 0 0152: set_zone_car_info "ISL_HAP" 1 (day) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0152: set_zone_car_info "ISL_HAP" 0 (night) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0324: set_zone_pedgroup_info "ISL_HAP" 1 (day) 29 0324: set_zone_pedgroup_info "ISL_HAP" 0 (night) 30 0A93: end_custom_thread
Offline
В CLEO для 3 и ВС предусмотрена возможность добавления опкодов через .cleo-плагины?
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Вобщем, ни фига не идёт draw_box_position, как и draw_text_1number - вылетает игра(точнее зависает при загрузке сейва, но энтер или пробел выручают...), в opcodes draw_box_position нет, зато есть draw_text_2numbers - в SCM.INI вроде ни того ни другого нету. Надо ещё текстуру попробывать загрузить, но без цыферок плёхо...
__text_6numbers идёт, но это старьё
{$CLEO} wait 100 while true wait 0 if Player.Defined($PLAYER_CHAR) then 0054: store_player $PLAYER_CHAR position_to 0@ 3@ 6@ //0170: 8@ = player $PLAYER_CHAR z_angle 008C: 1@ = float_to_integer 0@ 008D: 2@ = integer_to_float 1@ 0061: 0@ -= 2@ // floating-point values 0@ *= 100.0 // floating-point values 008C: 0@ = float_to_integer 0@ 008C: 4@ = float_to_integer 3@ 008D: 5@ = integer_to_float 4@ 0061: 3@ -= 5@ // floating-point values 3@ *= 100.0 // floating-point values 008C: 3@ = float_to_integer 3@ 008C: 7@ = float_to_integer 6@ 008D: 8@ = integer_to_float 7@ 0061: 6@ -= 8@ // floating-point values 6@ *= 100.0 // floating-point values 008C: 6@ = float_to_integer 6@ 0095: make 0@ absolute_integer 0095: make 3@ absolute_integer 0095: make 6@ absolute_integer //0308: text_6numbers 'COORDS' 1@ 0@ 4@ 3@ 7@ 6@ 10 ms 5 // 03F0: enable_text_draw 1 //0349: text_draw_style = 0 //0340: set_text_draw_color_RGBA 0xFF 0x0 0x0 0xFF // color 200 0 0 255 //033F: set_text_draw_letter_width_height 0.75 1.0 //0346: set_text_draw_background_color 0 0 0 150 045A: draw_text_1number 3.0 2.0 GXT 'COORDQ' number CoordQ // 'NUMBER' //0340: set_text_draw_color_RGBA 0xFA 0xFA 0xFF 0xFF //045A: draw_text_1number 3.0 15.0 GXT 'coord1' number 4@ //038E: draw_box_position 200.5 200.0 size 50.0 70.0 RGBA 0x0 0x0 0x0 0x14//20 0 90 100 end //03F0: enable_text_draw 0 end
Offline
Добавь нужные опкоды в .ini.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Ещё б знать, что в этой строчке писать, у Deji вчера из базы ведь скачивал..
Кстати в SCM.INI опкод draw_text_2numbers есть, а draw_text_1number добавлю из другой ини(вроде она поновее, но какая-то не такая
Я понял, можно добавить строчки из других ини, например VICESCM ?!
Вставил в .INI опкоды - пошло, но draw_text_2numbers выводит только два раза(даже если в одну строчку, как ниже в коде, всё равно - 3й и 4й draw_text_2numbers уже не показывает) - понимаю, что надо enable_text_draw в ноль ставить иногда, но как? Пытался, как в коде - показывает всё, но мигает...
И как другой шрифт сделать (похож на стандартный из fonts, "рыхлый" какой-то), эти опкоды менял, но...
Может опкод draw_text_6numbers забацать по аналогии?!
wait 100 while true wait 0 if Player.Defined($PLAYER_CHAR) then -----------------------расчет координат------------------------------- // 03F0: enable_text_draw 1 //0349: text_draw_style = 3 //0343: set_text_linewidth 200.0 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 3.0 2.0 GXT 'COORDX' number 1@ 0@ 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 50.0 2.0 GXT 'COORDY' number 4@ 3@ wait 750 03F0: enable_text_draw 0 //03F0: enable_text_draw 1 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 3.0 15.0 GXT 'COORDZ' number 7@ 6@ //045A: draw_text_1number 50.0 15.0 GXT 'UGOL1' number 9@ //wait 100 end //03F0: enable_text_draw 0 end
Last edited by reute70 (02-12-2011 18:35)
Offline
Бьюсь с координатами(наверно, придётся делать с метками и прыжками, как в моде Gta-LC) -забубенил новый опкод с выводом 7 цифр (чтоб и угол был!), но как и 6ю цифрами вылетает - чо ни так?
__И есть ли отладка для трёшки и санибилдера?
045C: draw_text_7numbers 3.0 35.0 GXT 'COORDF' number 1@ 0@ 4@ 3@ 7@ 6@ 9@
045C=10,text_draw_7numbers %1d% %2d% %3g% %4d% %5d% %6d% %7d% %8d% %9d% %10d%
Как здесь много народу! Спасибо, хоть DK'22 кратко ответил
Вобщем, все координаты удалось вывести только с их миганьем (wait 5 + enable_text_draw 0 - не понимаю я механизма прорисовки), причём при подключении спидометра половина цифр отрубается...
Текст выводится, как положено - с относит координатами экрана 640х480, а вот draw_box_position исходит из реального разрешения кадра, т.е. либо нужен опкод нахождения кол-ва пикселей по вертикали(а если через память, то будет проблема с версиями ехе), либо играть только с размерами 1920х1080 или 1680х1050(но при 1050 показатели скорости и повреждения будут разъезжаться), хотя можно скомпилить и для меньших размеров(но каких?! щас многие играют на ноутбуках)
_Цвет надписей, мне кажется, легче менять в fxt файле - правда, мало знаю спецбукв/управляющих символов ~r~
__ И с опкодами, даже с text_draw_3 и 4numbers не получилось...
{$CLEO} wait 100 while true wait 0 if Player.Defined($PLAYER_CHAR) then 0054: store_player $PLAYER_CHAR position_to 0@ 3@ 6@ 0170: 9@ = player $PLAYER_CHAR z_angle 008C: 9@ = float_to_integer 9@ 008C: 1@ = float_to_integer 0@ 008D: 2@ = integer_to_float 1@ 0061: 0@ -= 2@ // floating-point values 0@ *= 100.0 // floating-point values 008C: 0@ = float_to_integer 0@ 008C: 4@ = float_to_integer 3@ 008D: 5@ = integer_to_float 4@ 0061: 3@ -= 5@ // floating-point values 3@ *= 100.0 // floating-point values 008C: 3@ = float_to_integer 3@ 008C: 7@ = float_to_integer 6@ 008D: 8@ = integer_to_float 7@ 0061: 6@ -= 8@ // floating-point values 6@ *= 100.0 // floating-point values 008C: 6@ = float_to_integer 6@ 0095: make 0@ absolute_integer 0095: make 3@ absolute_integer 0095: make 6@ absolute_integer //0308: text_6numbers 'COORDS' 1@ 0@ 4@ 3@ 7@ 6@ 10 ms 5 03F0: enable_text_draw 1 //0340: set_text_draw_color 200 0 0 250 // color 200 0 0 255 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 3.0 2.0 GXT 'COORDX' number 1@ 0@ 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 80.0 2.0 GXT 'COORDY' number 4@ 3@ wait 5 03F0: enable_text_draw 0 //wait 500 //03F0: enable_text_draw 1 033F: set_text_draw_letter_width_height 0.4 1.2 045B: draw_text_2numbers 3.0 15.0 GXT 'COORDZ' number 7@ 6@ 045A: draw_text_1number 70.0 15.0 GXT 'UGOL1' number 9@ end //03F0: enable_text_draw 0 end
{$CLEO} wait 100 while true wait 0 if Player.Defined($PLAYER_CHAR) then if 00DF: actor $PLAYER_ACTOR driving //00E0: player $PLAYER_CHAR driving then 03C0: 0@ = actor $PLAYER_ACTOR car//00DA: 0@ = player $PLAYER_CHAR car 02E3: 1@ = car 0@ speed 0013: 1@ *= 3.6 // floating-point values 0092: 1@ = float 1@ to_integer 0227: 2@ = car 0@ health 0017: 2@ /= 7.81 0085: 3@ = 2@ 000E: 3@ -= 128 // integer values 0012: 3@ *= 3 0095: make 3@ absolute_integer 0093: 2@ = integer 2@ to_float //0092: 2@ = float 2@ to_integer if 0029: 3@ >= 255 // integer values then 0006: 3@ = 255 // integer values end 03F0: enable_text_draw 1 0340: set_text_draw_color 255 190 0 230 // color 200 0 0 255 033F: set_text_draw_letter_width_height 0.4 1.2 045A: draw_text_1number 3.0 421.0 GXT 'SPEEDQ' number 1@ 038E: draw_box_position 80.0 1015.0 size 2@ 24.0 3@ 50 130 250//0-255 50 150 038E: draw_box_position 80.0 1015.0 size 128.0 24.0 20 0 90 100 end //03F0: enable_text_draw 0 end //03F0: enable_text_draw 0 end
Last edited by reute70 (04-12-2011 18:49)
Offline
В ГТА3 на экране одновременно может быть только 2 текста (text_draw). Посмотри раздел скриптовые лимиты в справке. Возможно проблемы отсюда.
Offline
Вобщем, все координаты удалось вывести только с их миганьем (wait 5 + enable_text_draw 0 - не понимаю я механизма прорисовки), причём при подключении спидометра половина цифр отрубается...
У тебя в коде два wait-а, из-за чего скрипт будет работать "через раз". Чтобы текстуры не моргали, скрипт должен работать с такой же частотой, как отрисовка - для этого в коде должен быть один (не больше!) wait 0.
Команду enable_text_draw 1 достаточно выполнить один раз за цикл - перед рисованием текста или текстур.
Offline
При уборке 1го wait (ставлю 0000:, т.к. игра ругается "переход на нулевой оффсет") то же самое миганье,
при уборки то 2го, то 3го wait, не мигает(а при выходе из игры при нажатии Yes игра зависает), но отображаются только 2 первых или 2 последних текста(при посадке в машину со скриптом спидометра остаётся уже четверть нужного текста)
http://zalil.ru/32206724
Last edited by reute70 (05-12-2011 20:58)
Offline
При уборке 1го wait (ставлю 0000:, т.к. игра ругается "переход на нулевой оффсет") то же самое миганье,
Имел в виду wait-ы в цикле, конечно же. Самый первый wait (перед циклом) выполнится всего один раз, поэтому на отображение текста он влиять не будет.
Offline
Решил сделать скрипт-суперпрыжок для "залезания" на крыши - этот скрипт мелькал во многих модах, в частности Neo, посмотрел там код, тяжеловато, вроде основная мысль понятна - вперёд ГГ продвинуть, на метр, а вот с высотой как?
У меня Клод просто вперёд продвигается, сквозь стены, а не на крышу:
{$CLEO}
wait 100
while true
wait 0
if
Player.Defined($PLAYER_CHAR)
then
if
80DF: not actor $PLAYER_ACTOR driving //00E0: player $PLAYER_CHAR driving
05EE: key_pressed 0x52 // R
then
018C: play_sound 94 at 0.0 0.0 0.0
0054: store_player $PLAYER_CHAR position_to 0@ 1@ 2@
0170: 3@ = player $PLAYER_CHAR z_angle
02F6: 7@ = cosine 3@
02F7: 8@ = sinus 3@
7@ *= -1.0 // floating-point values
8@ *= 1.0 // floating-point values
005B: 0@ += 7@ // floating-point values
005B: 1@ += 8@ // floating-point values
02CE: 2@ = ground_z 0@ 1@ 2@
00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@
end
end
end
Offline
В смысле? Z коорд. - высота же.
Offline
В смысле, мне (ГГ, он же Клод, он же немой, он же...) надо не внутрь здания (си равно там интерьеров нету , а наверх, на крышу!
_Помню, вроде такое название мода - glimb, что ле?
to Den_spb
Спасибо, как раз что-то такое было, хорошо что подсказал!
Скоро проверю, а то думал, что код может быть намного больше, а я минималист!
Last edited by reute70 (08-12-2011 17:56)
Offline
Если в указанных координатах X, Y имеются несколько горизонтальных поверхностей (например, крыша здания и пол здания), то опкод 02CE: 3@ = ground_z 0@ 1@ 2@ выбирает ту поверхность, значение высоты которой ближе к значению, указанному в 2@. Поэтому для того, чтобы опкод определял высоту крыши, нужно для надёжности задать большее значение 2@ (например, 500.0).
Offline
С суперпрыжком всё получилось, щас решил поставить маркеры над спрят.пакетами (02A8: 17@ = create_marke 0 at ), заодно узнал что в трёшке и Вайсе максимум 18 локальных переменных.
Вопрос такой, как мне эти переменные перебрать в цикле for...end чтоб, например, изменить размер, цвет, дизаблить(0168, 0164) ?
__Вроде, там указатели нужны, а как это выглядит?...
PS Нашёл один пост Den_spb, как перебрать переменные в цикле, но тут другая закавыка - не могу убрать маркер с радара:
02A8: 1@ = create_marker 0 at 849.875 -788.625 27.0
if
05EE: key_pressed 0x49 // I
then
018C: play_sound 94 at 0.0 0.0 0.0
//0168: show_on_radar 1@ 0
0164: disable_marker 1@
Last edited by reute70 (10-12-2011 16:37)
Offline
{$CLEO} wait 100 while true wait 0 if Player.Defined($PLAYER_CHAR) then if and 80DF: not actor $PLAYER_ACTOR driving //00E0: player $PLAYER_CHAR driving 05EE: key_pressed 0x52 // R then 018C: play_sound 94 at 0.0 0.0 0.0 0054: store_player $PLAYER_CHAR position_to 0@ 1@ 2@ 0170: 3@ = player $PLAYER_CHAR z_angle 02F6: 7@ = cosine 3@ 02F7: 8@ = sinus 3@ 7@ *= -1.0 // floating-point values 8@ *= 1.0 // floating-point values 005B: 0@ += 7@ // floating-point values 005B: 1@ += 8@ // floating-point values 2@ += 1000.0 02CE: 2@ = ground_z 0@ 1@ 2@ 00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@ end end end
GIMS developer
Offline
Щас хочу заняться выводом карты на экран(есть скрипт, но буду по-другому) - если б можно было маштабировать 2048х2048 вывел бы! Но...
Какие пределы карты в трёшке и Вайсе, в единицах и координатах(в трёшке, как я понял -2000*2000) ?
Можно ссылку!
Offline
0390: load_txd_dictionary 'KARTA'
038F: load_texture "karta1" as 1
{wait 250
fade 0 1500}
//03F0: enable_text_draw 1
038D: draw_texture 1 position 10.0 10.0 size 512.0 512.0 RGBA 255 255 255 100
Где должен находиться txd-файл ?
Без первых двух строчек загружается белая, т.е. не находит, но игра работает, а при load_txd - зависает...
в папке txd/ стояло, models/txd/ - тоже, блин - ч0 ни так?
Offline
В папке models.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
0390: load_txd_dictionary 'KARTA'
038F: load_texture 'KARTA1' as 1
038D: draw_texture 1 position 10.0 10.0 size 1024.0 1024.0 RGBA 255 255 255 210
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
0@ /= 11.87 // floating-point values
1@ /= 9.2 // floating-point values
3@ = 172.0 // floating-point values
4@ = 205.0 // floating-point values
005B: 3@ += 0@ // floating-point values
0063: 4@ -= 1@ // floating-point values
033F: set_text_draw_letter_width_height 0.2 1.5
033E: text_draw 3@ 4@ 'MAP_00'
Вобщем, вывел текстуру(эти, блин, двойные-одинарные кавычки). Оттолкнулся от одного скрипта, но там использовался опкод 044D: load_splash 'MAP' со всеми его "фичами" (зато "старая" структура кода, с прыжками позволяет использовать одну и ту же кнопку для вкл/выкл режима без дополн конструкций - для меня, но тогда обновление позиции метки на карте только при включении режима...) - я решил с текстурой, типа real-time карта - Клод может ходить, правда позиции метки не меняется(не буду усложнять скрипт, наверно).
"Откалибровал" абсолютное смещение по Х и Y, ставя ГГ в центр карты игры(на стадионе), а вот коэфиц-нты подбирал "опытным" путём, что ни есть хорошо, да и ещё надо поточнее сделать...
___На гтафорумс нашёл это:
The GTA3 game world stretches from roughly -2048 to 2048
The Vice City game world stretches from roughly -2300 to 1600 on the X axis, and -1900 to 1900 on the Y axis. Again, there is no Z limit.
____Как я делал: половина карты игры 2048, половина экрана 320 - для draw_text(да хоть 4096/640), делю, получаю - 6.4 и 8.53 (для Y - 2048/240) - хрена лысого, в скрипте-источнике коэф 6.875 и 7.375, но там текстура растягивается на экран, хотя, х.з.
Offline
Находи разрешение экрана и ставь такие же размеры.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline