You are not logged in.
Я заметил, что в клео-плагинах не работает с ини файлами строка по указателю
Да, не стал делать поддержку строк по указателю в плагинах. Вообще, строка по указателю работает только в опкодах, для которых это прямо написано.
по второму. У меня вроде работает.
{$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.
Вот мой скрипт нормального ручного тормоза:
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 0x42 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 0xB73464 size 1 value 255 virtual_protect 0 END jump @Brake_2 :Brake_10 Car.RemoveReferences(0@) jump @Brake_1
Жмём <B> - машина стоит, ещё раз жмём - не стоит.
А этот скрипт определяет состояние ручника:
0000: NOP :BrakeTest wait 0 if Actor.Driving($PLAYER_ACTOR) jf @BrakeTest 0A8D: 1@ = read_memory 0xB73464 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).
Попробуй проверять во втором скрипте текущее состояние клавиши и обработанное:
while true wait 0 0A8D: 0@ = read_memory 0xB73464 size 1 virtual_protect 0 if 0@ == 0 then 0A8D: 0@ = read_memory 0xB73494 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 ставится не так)
{$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
ты издеваешься что ли?
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 опкодов, для работы с математическими функциями.
0CC0=2,%2d% = DEG2RAD %1d% 0CC0: 0@ = DEG2RAD 1@
Функция преобразования углов. Преобразует градусы в радианы.
0CC1=2,%2d% = RAD2DEG %1d% 0CC1: 0@ = RAD2DEG 1@
Функция преобразования углов. Преобразует радианы в градусы.
0CC2=4,THETA %1d% SIN %2d% COS %3d% TAN %4d% 0CC2: THETA 0@ SIN 1@ COS 2@ TAN 3@
Возвращает синус, косинус и тангенс угла Theta.
0CC3=4,THETA %1d% ASIN %2d% ACOS %3d% ATAN %4d% 0CC3: THETA 0@ ASIN 1@ ACOS 2@ ATAN 3@
Возвращает арксинус, арккосинус и арккотангенс угла Theta.
0CC4=3,THETA %1d% SEC %2d% COSECANT %3d% 0CC4: THETA 0@ SEC 1@ COSECANT 2@
Возвращает секанс, косеканс угла Theta.
0CC5=3,%3d% = HYPOT %1d% %2d% 0CC5: 0@ = HYPOT 1@ 2@
Корень квадратный из (x^2 + y^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 опода:
0CC7=4,%4d% = STRUCT %1d% FIELD %2d% SIZE %3d% 0CC7: 0@ = STRUCT 1@ FIELD 2@ SIZE 3@
0CC8=4,SRTUCT %1d% FILED %2d% SIZE %3d% = %4d% 0CC8: STRUCT 0@ FIELD 1@ SIZE 3@ = 4@
Читает / записывает значение указанного поля структуры.
Скрипт для тестирования:
{$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 0x73 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 0x74 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
Скрипт:
{$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-файл, который мы читаем:
[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@ 3@ 4@ True .... .... ....
после вторгого:
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