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_threadINI-файл, который мы читаем:
[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