You are not logged in.
Я заметил, что в клео-плагинах не работает с ини файлами строка по указателю
Да, не стал делать поддержку строк по указателю в плагинах. Вообще, строка по указателю работает только в опкодах, для которых это прямо написано.
по второму. У меня вроде работает.
1 2 3 4 5 6 7 8 9 10 11 | { $CLEO } 0000: gosub @test 0a93: :test if 059A: NOP_false 0AA1: return_if_false 0ACA: show_text_box "return_if_false doesn't work" return |
Offline
Возникла проблемка, скрипты которые не .cs, динамические, не работают с опкодом 03A4:, если, например, вызвать такой поток с параметрами и в качестве параметров передать имя потока, то динамический поток не получает должное имя, а только то, что называет файл динамического скрипта.
I know everything and nothing...
Offline
Дак а поддержка будет хотя бы для ини строк по указателю? Мне надо для скрипта, я вобще на квик опкоде уже написал)) Ну всё равно в клео лучше было бы иначе вобще смысл там какой, когда из ини считать стринг даже не получится скажем из-за того что указатели не поддерживаются...
а код ретурн иф фалс у меня приблизительно такой и есть, тока я иф не пишу - потому что проверка одна, мб из-за этого не срабатывает, хз... Ещё уточню)
Offline
ОК. Переработал все плагины. Собрал все в один solution, добавил поддержку строк по указателю в IniFiles.cleo и добавил еще один ерундовый плагин - IntOperations.cleo.
Offline
Возникла проблемка, скрипты которые не .cs, динамические, не работают с опкодом 03A4:, если, например, вызвать такой поток с параметрами и в качестве параметров передать имя потока, то динамический поток не получает должное имя, а только то, что называет файл динамического скрипта.
А как же это исправить, ну да ладно можно не исправлять ибо исправлять нечего. Все работает ошибка была в другом.
I know everything and nothing...
Offline
Похоже, я баг нашёл в CLEO 4.
Вот мой скрипт нормального ручного тормоза:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 0000: NOP :Brake_1 wait 0 if Actor.Driving( $PLAYER_ACTOR ) jf @Brake_1 03C0: 0@ = actor $PLAYER_ACTOR car 2@ = 0 :Brake_2 wait 0 if Actor.Driving( $PLAYER_ACTOR ) jf @Brake_10 01BD: 1@ = current_time_in_ms 0062: 1@ -= 3@ IF 1@ >= 350 jf @Brake_3 IF 0AB0: key_pressed 0x 42 THEN IF 2@ == 1 THEN 2@ = 0 ELSE 2@ = 1 END 01BD: 3@ = current_time_in_ms END :Brake_3 IF 2@ == 1 THEN 0A8C: write_memory 0xB 73464 size 1 value 255 virtual_protect 0 END jump @Brake_2 :Brake_10 Car.RemoveReferences( 0@ ) jump @Brake_1 |
Жмём <B> - машина стоит, ещё раз жмём - не стоит.
А этот скрипт определяет состояние ручника:
1 2 3 4 5 6 7 8 9 10 | 0000: NOP :BrakeTest wait 0 if Actor.Driving( $PLAYER_ACTOR ) jf @BrakeTest 0A8D: 1@ = read_memory 0xB 73464 size 1 virtual_protect 0 01E4: show_text_1number_lowpriority GXT 'NUMBER' number 1@ time 0 flag 1 jump @BrakeTest |
Проблема в том, что в CLEO 4 (v 4.1.0.25) если использовать мой ручник, скрипт проверки всегда выдаёт 0 (ручник опущен), а если обычный (пробел) - определяет правильно. В CLEO 3 (v 3.0.950) работает без проблем.
Last edited by CraZZZy-GameRRR (07-04-2010 20:54)
Offline
А еще в клео 4, если изменять гравитацию игры, она не меняется так, как нужно мне. В клео 3 все прекрасно.
Offline
@CraZZZy-GameRRR - скорее всего все дело в том, что второй скрипт (который проверяет состояние клаиши) находится в очереди перед первым скриптом (который устанавливает состояние клавиши). То есть сначала проверяется "нажатость" клавиши, а потом только она "нажимается". А при следующей обработке скриптов эта память уже обнуляется (состояния клавиш переносятся в структуру prevPadState).
Попробуй проверять во втором скрипте текущее состояние клавиши и обработанное:
1 2 3 4 5 6 7 8 9 10 | while true wait 0 0A8D: 0@ = read_memory 0xB 73464 size 1 virtual_protect 0 if 0@ == 0 then 0A8D: 0@ = read_memory 0xB 73494 size 1 virtual_protect 0 end 01E4: show_text_1number_lowpriority GXT 'NUMBER' number 0@ time 0 flag 1 end |
@GTASA - код, пожалуйста.
Offline
@Alien - Спасибо, теперь работает правильно!
Alien, ести не трудно, можешь в CLEO добавить опкод типа 038F для загрузки текстур из PNG файлов?
Offline
Вот мой код. На клео 3 отлично работает, в клео 4 изменяется гравитация вообще не так как надо (даже стандартная 0.009 ставится не так)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | { $CLEO } wait 0 :STRT wait 0 if Player.Defined( $PLAYER_CHAR ) jf @STRT if and 0AB0: key_pressed 71 0AB0: 49 then 1@ = 0.300 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 :0 wait 0 if 8AB0: 49 jf @0 end if and 0AB0: key_pressed 71 0AB0: 50 then 1@ = 0.100 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 :1 wait 0 if 8AB0: 50 jf @1 end if and 0AB0: key_pressed 71 0AB0: 51 then 1@ = 0.030 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 :2 wait 0 if 8AB0: 51 jf @2 end if and 0AB0: key_pressed 71 0AB0: 52 then 1@ = 0.015 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 :3 wait 0 if 8AB0: 52 jf @3 end if and 0AB0: key_pressed 71 0AB0: 53 then 1@ = 0.008 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 wait 200 018C: play_sound 1056 at 0.0 0.0 0.0 :4 wait 0 if 8AB0: 53 jf @4 end if and 0AB0: key_pressed 71 0AB0: 54 then 1@ = 0.007 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 :5 wait 0 if 8AB0: 54 jf @5 end if and 0AB0: key_pressed 71 0AB0: 55 then 1@ = 0.006 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 :6 wait 0 if 8AB0: 55 jf @6 end if and 0AB0: key_pressed 71 0AB0: 56 then 1@ = 0.005 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 :7 wait 0 if 8AB0: 56 jf @7 end if and 0AB0: key_pressed 71 0AB0: 57 then 1@ = 0.003 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 :8 wait 0 if 8AB0: 57 jf @8 end if and 0AB0: key_pressed 71 0AB0: 48 then 1@ = 0.001 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 :9 wait 0 if 8AB0: 48 jf @9 end if and 0AB0: key_pressed 71 0AB0: 189 then 1@ -= 0.001 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1056 at 0.0 0.0 0.0 02FD: show_text_2numbers_lowpriority GXT 'Number' numbers 1@ 1@ time 150 flag 1 // ~b~1 Pointer!~s~ Distance ~1~.~1~m wait 100 end if and 0AB0: key_pressed 71 0AB0: 187 then 1@ += 0.001 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 018C: play_sound 1057 at 0.0 0.0 0.0 02FD: show_text_2numbers_lowpriority GXT 'Number' numbers 1@ 1@ time 150 flag 1 // ~b~1 Pointer!~s~ Distance ~1~.~1~m wait 100 end jump @STRT |
Offline
ты издеваешься что ли?
1 | 0A8C: write_memory 8796548 size 3 value 1@ virtual_protect 1 |
Какой еще size 3?
@CraZZZy-GameRRR - попытаться можно, но смысл-то в чем? Лень упаковывать текстуры в архивы?
Last edited by Alien (09-04-2010 13:20)
Offline
Да, я допустил ошибку. Исправил у себя. Но я этот скрипт делал очень давно, и все работало! И сейчас у меня клео 3 и все работает. А вот клео 4 все-таки глючит. Тем более при загрузке игры у меня вообще скрипты некоторые не работают и т.д.
Offline
@CraZZZy-GameRRR - попытаться можно, но смысл-то в чем? Лень упаковывать текстуры в архивы?
Ну, например, любой желающий сможет нарисовать и с лёгкостью подключить свой собственный скин к моему спидометру. К тому же текстуры в PNG весят намного меньше нежели в TXD (у меня 240 КБ против 2.27 МБ). Можно ещё кучу других пременений придумать.
Offline
Эт какого же размера текстура у тебя в ТХД ? и в сжатом виде?
Offline
frOpcodes
Плагин добавляет в игру 7 опкодов, для работы с математическими функциями.
1 2 | 0CC0=2,%2d% = DEG2RAD %1d% 0CC0: 0@ = DEG2RAD 1@ |
Функция преобразования углов. Преобразует градусы в радианы.
1 2 | 0CC1=2,%2d% = RAD2DEG %1d% 0CC1: 0@ = RAD2DEG 1@ |
Функция преобразования углов. Преобразует радианы в градусы.
1 2 | 0CC2=4,THETA %1d% SIN %2d% COS %3d% TAN %4d% 0CC2: THETA 0@ SIN 1@ COS 2@ TAN 3@ |
Возвращает синус, косинус и тангенс угла Theta.
1 2 | 0CC3=4,THETA %1d% ASIN %2d% ACOS %3d% ATAN %4d% 0CC3: THETA 0@ ASIN 1@ ACOS 2@ ATAN 3@ |
Возвращает арксинус, арккосинус и арккотангенс угла Theta.
1 2 | 0CC4=3,THETA %1d% SEC %2d% COSECANT %3d% 0CC4: THETA 0@ SEC 1@ COSECANT 2@ |
Возвращает секанс, косеканс угла Theta.
1 2 | 0CC5=3,%3d% = HYPOT %1d% %2d% 0CC5: 0@ = HYPOT 1@ 2@ |
Корень квадратный из (x^2 + y^2) - гипотенуза прямоугольного треугольника по двум катетам.
1 2 | 0CC6=3,VALUE %1d% CEIL %2d% FLOOR %3d% 0CC6: VALUE 0@ CEIL 1@ FLOOR 2@ |
Округление до ближайшего большего, меньшего целого числа.
Offline
Копируешь .cleo файл в SA/CLEO/ , перезагружаешь SB, and enjoy!
Offline
Блин, не заметил, ты про один опкод спрашиваешь...
Offline
frOpcodes
+2 опода:
1 2 | 0CC7=4,%4d% = STRUCT %1d% FIELD %2d% SIZE %3d% 0CC7: 0@ = STRUCT 1@ FIELD 2@ SIZE 3@ |
1 2 | 0CC8=4,SRTUCT %1d% FILED %2d% SIZE %3d% = %4d% 0CC8: STRUCT 0@ FIELD 1@ SIZE 3@ = 4@ |
Читает / записывает значение указанного поля структуры.
Скрипт для тестирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | { $CLEO } var 1@ : Integer 2@ : Integer end 33@ = 0 while true wait 0 if Player.Defined( $PLAYER_CHAR ) then if Actor.Driving( $PLAYER_ACTOR ) then if and 0AB0: key_pressed 0x 73 33@ > 150 then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 0@ = car 0@ struct 0CC7: 1@ = STRUCT 0@ FIELD 1076 SIZE 1 0CC7: 2@ = STRUCT 0@ FIELD 1077 SIZE 1 0CC7: 3@ = STRUCT 0@ FIELD 34 SIZE 2 0ACE: show_formatted_text_box "Body color: %d~n~Stripe color: %d~n~Model: %d" 1@ 2@ 3@ 33@ = 0 end if and 0AB0: key_pressed 0x 74 33@ > 150 then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 0@ = car 0@ struct 1@ = Random(0, 127) 2@ = Random(1, 127) 0CC8: STRUCT 0@ FIELD 1076 SIZE 1 = 1@ 0CC8: STRUCT 0@ FIELD 1077 SIZE 1 = 2@ 33@ = 0 end end end end |
Offline
У меня... блин щас номер версии клео 4 не скажу) (не последня) там вобщем запускается внешний клео-скрипт опкодом 0A92: create_custom_thread "radio.lscr"
И в папке с игрой он отсутствовал - в результате игра слетала, в клео 3 у опкода была проверка на существование файла... Надо бы добавить
Offline
Скрипт:
1 2 3 4 5 6 7 8 | {$CLEO .cs} wait 6000 0AF4: 1@ v = read_string_from_ini_file "cleo\Config.ini" section "General" key "Param1" 0AF4: 2@ v = read_string_from_ini_file "cleo\Config.ini" section "General" key "Param2" 0ACC: show_text_lowpriority 1@ v time 3000 wait 2000 0ACC: show_text_lowpriority 2@ v time 3000 0A93: end_custom_thread |
INI-файл, который мы читаем:
1 2 3 | [General] Param1= True Param2= False |
Затем всё внимание на экран...
Выводит первую переменную - TrueFalse (???).
Затем вторую - False (вроде правильно).
Это можно исправить?
Last edited by CraZZZy-GameRRR (18-04-2010 21:14)
Offline
@CraZZZy-GameRRR - @v - шестнадцатибайтовые переменные. Строка в 1@v занимает четыре переменные 1@..4@ Т.е. после первого присваивания у тебя в переменных будет:
1 2 | 1@ 2@ 3@ 4@ True .... .... .... |
после вторгого:
1 2 | 1@ 2@ 3@ 4@ True Fals e ... .... |
У тебя строки перезаписывают друг друга.
Это можно исправить?
Замени 2@v на 5@v.
Last edited by Sanchez (20-04-2010 08:54)
Offline
Теперь всё понятно.
Offline
Эх, чего-то я увлекся уменьшением размера бинарников. В обновлении CLEO.asi весит меньше 40 КБ. Плагины FileSystemOperations.cleo, IniFiles.cleo, IntOperations.cleo по 3-4 КБ каждый. Также собрал свой asi loader (опять таки меньшего размера).:crazy:
Offline