#276 12-05-2011 20:30

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

нашёл пару багов:
в версии 4.1.30 опкод 0AE6 отказывается работать, т.е. вылет (возможно потому что я использую вместо стринговой переменной переменную с адресом памяти строки), однако на версии 4.1.25 работает прекрасно (с той же переменной)
в версии 4.1.25 после использования опкода 0AE7 (хотя есть вариант что после 0AE6 или 0AE8, точно не проверял) происходит вылет на player.build , что неприемлимо...
вопрос: будут ли ещё обновления? если нет, то это плохо...

Last edited by Voron295 (14-05-2011 09:46)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#277 15-05-2011 17:58

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

Приведите полный код.

Offline

#278 15-05-2011 21:46

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

я вообще скрипт mp3-плеера пишу, завтра напишу комментарии и выложу исходник.

EDIT:
вот код с комментами:

{$CLEO}
const
MP3_ADDRESS         = 10@
CURRENT_TRACK       = 14@
MP3_STATE           = 7@
TRACK               = 17@
ARTIST              = 18@
TRACK_ARTIST        = 19@
VOLUME              = 8@
VOLUME_PERCENT      = 9@
MP3_NAME            = 12@
MP3_ID              = 5@
end
var
0@ : Integer
1@ : Integer
2@ : Integer
10@: Integer
11@: Integer
12@: Integer
14@: Integer
19@: Integer
4@: Integer
9@: Float
8@: Float
end
0AC8: MP3_ADDRESS = allocate_memory_size 260000           // поддержка максимум 1000 mp3-файлов
0AC8: TRACK  = allocate_memory_size 30                    // память под название трека из ID3
0AC8: ARTIST  = allocate_memory_size 30                   // память под имя артиста из ID3
0AC8: TRACK_ARTIST  = allocate_memory_size 100            // память под строку, которая будет выведена на экран (Трек - Артист)
VOLUME_PERCENT = 100                                      // громкость в процентах
VOLUME = 1.0                                              // громкость для опкода 0ABC

:FIND_MP3
wait 0                                                                          
CURRENT_TRACK = 0                                                              
11@ = CURRENT_TRACK
11@ *= 260
11@ += MP3_ADDRESS
if              
0AE6: 1@ = find_first_file "mp3_player\*.mp3" get_filename_to 11@ //IF and SET
then 
    CURRENT_TRACK += 1                                                // тут происходит поиск mp3-файлов
    11@ = CURRENT_TRACK                                               // и запись их имён в память
    11@ *= 260                                                        // на каждый mp3-файл отводится 260 символов...
    11@ += MP3_ADDRESS                                                // хотя скорее 259, иначе следующее название будет продолжением предыдущего
        while 0AE7: 11@ = find_next_file 1@ //IF and SET              // надо будет исправить... =)
        CURRENT_TRACK += 1
        11@ = CURRENT_TRACK
        11@ *= 260
        11@ += MP3_ADDRESS
        wait 0
        end  
    0AE8: find_close 1@
    4@ = CURRENT_TRACK
    4@ -= 1
    CURRENT_TRACK = 0
    0AB1: call_scm_func @MP3_LOAD 2 CURRENT_TRACK MP3_ADDRESS MP3_NAME MP3_ID     // сделал в виде scm-функции, чтобы было проще                                                                                                                                            
else                                                                          // в MP3_NAME получаем имя mp3-файла, в MP3_ID - его ID в игре 
0AE8: find_close 1@                                                           // может там содержится не ID, но мне всё равно так проще =)
jump @FIND_MP3
end

:PLAY         // на этой метке осуществляется запуск первого mp3-файла
wait 0              
if
0ab0:   101
jf @PLAY
MP3_STATE = 1
    while 0ab0:   101
    wait 0
    end
gosub @MP3_GET_ID3            // получаем в MP3_NAME ID3 тэги...
0ACA: show_text_box MP3_NAME         // и выводит в текстбокс
jump @SET_STATE               // переходим на метку установки статуса mp3

:PLAY_PAUSE
wait 0                  // т.к. установка определённого статуса mp3-файла происходит в цикле,
    if                  // после запуска mp3 сначала нужно сменить следующую операцию над ним 
    MP3_STATE == 1                                              // (продолжение воспроизведения)
    then
    MP3_STATE = 3
    end
0AB9: get_audiostream MP3_ID state_to 6@      // получаем текущий статус mp3-файла
if
0ab0:   101                 // если нажата кнопка Num 5, идём дальше, если нет - проверяем другие нажатия и т.д.
jf @STOP
    while 0ab0:   101       // ждём, когда игрок отпустит клавишу
    wait 0
    end
if                                                                        
6@ == 1                         // если он на данный момент воспроизводится,                                    
then                                   
MP3_STATE = 2                   // то применяем к нему операцию приостановки
0ACA: show_text_box "Pause"      // и выводим текстбокс "Pause"
else
MP3_STATE = 3                    // в случае, если mp3 на данный момент приостановлен, продолжаем его воспроизведение
0ACA: show_text_box "Play"       // и выводим текстбокс "Play"
end
jump @SET_STATE

//-------------------------

:STOP                      // ну тут если нажать Num *, то остановим файл и выведем "Stop"
if
0ab0:   106
jf @NEXT                   // если не нажать - идём дальше
while 0ab0: 106
wait 0
end
MP3_STATE = 0
0ACA: show_text_box "Stop"
jump @SET_STATE

:STOP_1 
if
6@ == -1
jf @SET_STATE
if
not MP3_STATE == 0
then
jump @NEXT_1
else
jump @SET_STATE
end

//--------------------------

:NEXT              
if
0ab0:   102        // если нажать Num 6, то....
jf @PREV

:NEXT_1
0AAD: set_audiostream MP3_ID perform_action 0          // останавливаем текущий mp3-файл
audiostream.Release(MP3_ID)        // и выгружаем его из памяти
if                                 // убеждаемся, что текущий трек не является последним
CURRENT_TRACK == 4@                // 4@ - переменная содержащая общее кол-во mp3-файлов (учитывая, что первым является номер 0)
then
CURRENT_TRACK = 0             // если всё-таки является, то загрузим первый файл
else
CURRENT_TRACK += 1            // а если нет - загрузим следующий
end
0AB1: call_scm_func @MP3_LOAD 2 CURRENT_TRACK MP3_ADDRESS MP3_NAME MP3_ID        // загружаем mp3
while 0ab0:   102
wait 0
end
if
MP3_STATE == 2
then
MP3_STATE = 0
end
gosub @MP3_GET_ID3                // получаем его ID3 теги
0ACA: show_text_box MP3_NAME      // и выводим их в текстбоксе
jump @SET_STATE

//-------------------------

:PREV                            // тут аналогично предыдущей метке...
if
0ab0:   100
jf @VOLUME_PLUS      
0AAD: set_audiostream MP3_ID perform_action 0
audiostream.Release(MP3_ID)
if
CURRENT_TRACK == 0
then
CURRENT_TRACK = 4@
else
CURRENT_TRACK -= 1
end
0AB1: call_scm_func @MP3_LOAD 2 CURRENT_TRACK MP3_ADDRESS MP3_NAME MP3_ID
while 0ab0:   100
wait 0
end
if
MP3_STATE == 2
then
MP3_STATE = 0
end
gosub @MP3_GET_ID3
0ACA: show_text_box MP3_NAME
jump @SET_STATE

//-------------------------

:VOLUME_PLUS                           // тут управление громкостью
if                                     
0ab0:   107
jf @VOLUME_MINUS
if
VOLUME_PERCENT < 100
then
VOLUME_PERCENT += 2
008F: VOLUME = integer VOLUME_PERCENT to_float   
VOLUME /= 100.0                                 // решил проценты переводить в дробное число
0ABC: set_audiostream MP3_ID volume VOLUME      // ибо, если делать наоборот, получается на 1 процент меньше...
end
0ACE: show_formatted_text_box "Volume: %d%%" VOLUME_PERCENT       // форматирование и вывод в текстбокс
{while 0ab0:   107
wait 0
end}
jump @STOP_1

//-------------------------

:VOLUME_MINUS                       // аналогично предыдущей метке
if
0ab0:   109
jf @STOP_1
if
VOLUME_PERCENT > 0
then
VOLUME_PERCENT -= 2
008F: VOLUME = integer VOLUME_PERCENT to_float
VOLUME /= 100.0 
0ABC: set_audiostream MP3_ID volume VOLUME
end
0ACE: show_formatted_text_box "Volume: %d%%" VOLUME_PERCENT
{while 0ab0:   109
wait 0
end}
jump @STOP_1

//-------------------------

:SET_STATE                          // тут устанавливаем громкость и статус
0ABC: set_audiostream MP3_ID volume VOLUME
0AAD: set_audiostream MP3_ID perform_action MP3_STATE
jump @PLAY_PAUSE

//=====================================================

:MP3_LOAD                          // это scm-функция загрузки mp3-файла
2@ = 0@
2@ *= 260
2@ += 1@
0A99: chdir "mp3_player"
audiostream.Load(3@, 2@)
0A99: chdir 0
0AB2: ret 2 2@ 3@

//=====================================================

:MP3_GET_ID3                         // а это gosub для получения ID3 тэгов
0A99: chdir "mp3_player"
0A9A: 13@ = openfile MP3_NAME mode "rb" // IF and SET 
0A99: chdir 0
0A9C: 16@ = file 13@ size
//----------------------------------
16@ -= 128
0AD5: file 13@ seek 16@ from_origin 0 //IF and SET  
0A9D: readfile 13@ size 2 to 15@
0A9D: readfile 13@ size 1 to 20@  
if and
    0039:   15@ == 0x4154
    0039:   20@ == 0x47
then 
0A9C: 16@ = file 13@ size
//----------------------------------
16@ -= 125
0AD5: file 13@ seek 16@ from_origin 0 //IF and SET   
0AD7: read_string_from_file 13@ to TRACK size 30 //IF and SET  
0AD5: file 13@ seek 16@ from_origin 0 //IF and SET   
0AD7: read_string_from_file 13@ to 21@v size 30 //IF and SET  
//----------------------------------
16@ += 30
0AD5: file 13@ seek 16@ from_origin 0 //IF and SET
0AD7: read_string_from_file 13@ to ARTIST size 30 //IF and SET 
0AD5: file 13@ seek 16@ from_origin 0 //IF and SET
0AD7: read_string_from_file 13@ to 22@v size 30 //IF and SET 
0A9B: closefile 13@
//----------------------------------
    if
    8846:   not string 21@v empty // same as 0844 
    then 
        if
        8846:   not string 22@v empty // same as 0844 
        then
        0AD3: string TRACK_ARTIST format "%s - %s" TRACK ARTIST
        else
        0AD3: string TRACK_ARTIST format "%s - %s" TRACK "Unknown Artist" 
        end
    MP3_NAME = TRACK_ARTIST
    return        
    else
        if
        8846:   not string 22@v empty // same as 0844 
        then
        0AD3: string TRACK_ARTIST format "%s - %s" "Unknown Track" ARTIST
        MP3_NAME = TRACK_ARTIST
        return
        else 
        return
        end            
    end
else
0A9B: closefile 13@ 
return
end

Last edited by Voron295 (16-05-2011 13:56)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#279 05-08-2011 13:10

Killer.rus
Registered: 05-08-2011
Posts: 1

Re: CLEO 4 для GTA San Andreas

Народ, извините если повторяюсь, но у меня проблема. CLEO save не пашет что ли? Когда я начинаю новую
игру у меня все сохранения работают и после перезапуска игры, а если я загружаю и снова сохраняюсь, то
игра вылетает. В чем дело??? CLEO 4 ставил сразу после установки, подправил в папке ...\GTA SA\Data
пару файлов и закинул старые скрипты с CLEO 3 (когда я в прошлый раз ставил GTA SA устанавливал CLEO 3 и сохранил все скрипты, которые делал сам и которые скачал) и поставил GTA-SA_Parkour MOD. РУДЗ!!!

Offline

#280 23-08-2011 04:37

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: CLEO 4 для GTA San Andreas

Ну что ж ищи баги в самих скриптах. Была у меня такая же проблема поисправлял скрипты теперь все ок.

Offline

#281 29-10-2011 09:25

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

Выкладываю первую публичную версию 4.2a. Буковка 'a' обозначает 'alpha', то есть версия не является стабильной и не предназначена для публичного использования.
Новых "фич" нет, из нововведений - открытие исходного кода. Теперь любой желающий может с ним ознакомиться. Никаких лицензий не прикрепляю, поскольку то, чем мы тут занимаемся, все равно "не вполне законно".

PS: Если появится группа людей, заинтересованная в разработке, возможно имеет смысл переехать на sourceforge или google code. А может быть Deji возьмется за разработку и выпустит что-то вроде CLEO 5 (это обсуждалось в английской ветке, если кто-то не в курсе). В общем, поживем - увидим.
[You must login to view hidden text.]

Last edited by Alien (29-10-2011 09:59)

Offline

#282 29-10-2011 09:42

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

Ооо, как раз вовремя!)

UPD. Блин, что-то игра ошибку выбивает в самом начале - Error loading plugin cleo.asi

Last edited by Voron295 (29-10-2011 10:01)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#283 29-10-2011 10:08

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

UPD. Блин, что-то игра ошибку выбивает в самом начале - Error loading plugin cleo.asi

Хм. Интересно, попробуйте пересобрать из исходников. Посмотрите, создался ли в корне файл cleo.log и выложите его содержимое (если игра установлена в Program Files, переустановите куда-нибудь, куда разрешена запись без админ-прав).

Offline

#284 29-10-2011 10:12

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

Alien wrote:

Хм. Интересно, попробуйте пересобрать из исходников. Посмотрите, создался ли в корне файл cleo.log и выложите его содержимое

где взять make.exe? и вообще, не проще ли было просто сделать в виде проекта для, скажем, вижуал студио 10?

P.S. прошу простить меня за подобные вопросы, я ещё начинающий программист)

Last edited by Voron295 (29-10-2011 10:18)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#285 29-10-2011 10:19

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

Может быть и проще, но у меня лично с каких-то пор имеется предпочтение к GNU toolchain. Кроме того, код является специфичным к GCC, компилятор Microsoft его не соберет.
make.exe брать в интернете (нужна сборка под винду).

Вообще, удобно будет использовать этот toolchain (там уже есть GNU make).
Еще понадобится Cygwin, с его поиском и установкой проблем быть не должно.

Offline

#286 29-10-2011 11:31

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

Alien wrote:

Может быть и проще, но у меня лично с каких-то пор имеется предпочтение к GNU toolchain. Кроме того, код является специфичным к GCC, компилятор Microsoft его не соберет.

А разве есть разница между компиляторами одного и того же языка?


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#287 29-10-2011 14:04

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

А разве есть разница между компиляторами одного и того же языка?

Ну этот вопрос явно не мне надо задавать, ибо я сам являюсь может быть хоть и не "начинающим программистом", но программистом-любителем то уж точно... Ну, попробую ответить.
Да, разница есть...
Во-первых, язык кучу раз перестандартизировался (в последний раз это произошло в августе этого года, и на данный момент не существует ни одного компилятора, который бы полностью имплементировал все нововведения этого стандарта. А я все равно уже начал использовать эти нововведения в CLEO - не удержался grin ). По этому поводу мне вообще кажется, что нет такого языка C++, есть только языки, определяемые соответствующими ANSI/ISO стандартами C++.
Во-вторых, разработчики коммерческих компиляторов часто кладут болт на обеспечение совместимости со стандартами. GCC тут старается более или менее им следовать, но это не всегда удается.
В-третьих, у большинства компиляторов имеются некоторые специфические только для них (или для целевой платформы) расширения языка. Например, описанные тут или тут). Когда имеешь дело с низкоуровневыми хаками, без них просто не обойтись (без того же inline-ассемблера, например). Поэтому приходится писать код, специфический для какого-то конкретного компилера...

PS: чего-то мы нафлудили много. Вы лучше попробуйте решить проблему с Error loading plugin. Вопрос к другим скачавшим - у вас есть такая же ошибка?

Offline

#288 29-10-2011 15:35

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

а, кстати, в новой версии, помимо того, что добавлен исходный код, исправлены ли баги, которых было немало вроде (взять к примеру этот пост)?


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#289 29-10-2011 18:01

Alien
Registered: 12-10-2008
Posts: 564

Re: CLEO 4 для GTA San Andreas

Ну, вообще-то я никаких вылетов в приведенном коде не наблюдал и не наблюдаю. Что касается опкодов вызова нативного кода, то с ними надо работать очень осторожно и четко понимать, что делаешь. Вполне возможно, что в вызываемой функции не сохраняется какой-нибудь регистр (меняться могут только eax, ecx, edx) или неверно указан stack_align.
Единственный баг, который, признаю, есть - это баг со звуком (на машинах с аппаратным ускорением 3d audio positioning ломается внутриигровая звуковая подсистема). Баг остается.
Ах да, еще был баг с тем, что скриптовая музыка продолжает играть, когда окно сворачивают. Этот баг должен быть исправлен, но я не проверял.))

Offline

#290 29-10-2011 18:49

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

поставил сперва CLEO 3 с asi-лоадером от JernejL а потом поставил bass.dll и cleo.asi от новой версии - запустилось) а у друга сразу заработало... интересно...


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#291 01-11-2011 15:51

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

Re: CLEO 4 для GTA San Andreas

Alien, ожидаются ли исходники Cleo для Vice City? Или хотя бы версия CLEO Vice City с поддержкой этого:
http://www.gtagarage.com/mods/show.php?id=2508

Добавление своих анимаций - очень нужная вещь, а с клео тот плагин почему-то не совместим sad

Пишу сюда, т.к. Alien не заметил видимо лс еще с июля sad

Last edited by Shag (01-11-2011 15:52)

Offline

#292 20-12-2011 20:02

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

Re: CLEO 4 для GTA San Andreas

В последней версии CLEO проблема с опкодами, созданными с помощью CLEO SDK. Проблема в этой фунции

CLEO_GetFloatOpcodeParam

Вылетает не только с моими опкодами, но и с плагином Sanchez'a frOpcodes.cleo, который тоже использует эту функцию.

PS раньше, несколько месяцев назад, frOpcodes.cleo у меня работал.


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#293 21-12-2011 16:14

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

Re: CLEO 4 для GTA San Andreas

Проблема решена.
Ошибка была в совместимости с scm-log'ом.


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#294 07-01-2012 16:16

wmysterio
Registered: 04-03-2011
Posts: 214
Website

Re: CLEO 4 для GTA San Andreas

Рад что есть планы сделать новую версию Cleo.
Очень бы хотелось, что бы изменили проверки двух переменных, например:
в место 001D:   27@ > 33@ // (int) можно было писать просто 27@ > 33@

Offline

#295 07-01-2012 16:55

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: CLEO 4 для GTA San Andreas

Sanny Builder не может знать, какая из двух проверок должна быть использована - для дробных или для целых чисел:
001D:   27@ > 33@ // (int)
0025:   27@ > 33@ // (float)
Поэтому надо либо указывать номер опкода, либо предварительно объявить тип переменных в конструкции var..end (см. справку СБ, раздел Кодинг - Переменные).

Last edited by Den_spb (07-01-2012 16:59)

Offline

#296 07-01-2012 20:26

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: CLEO 4 для GTA San Andreas

wmysterio wrote:

Рад что есть планы сделать новую версию Cleo.
Очень бы хотелось, что бы изменили проверки двух переменных, например:
в место 001D:   27@ > 33@ // (int) можно было писать просто 27@ > 33@

Ну, если уж на то пошло, то это не от CLEO зависит, а от SannyBuilder'а, а насколько мне известно, Seemann больше не собирается выпускать новых версий.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#297 07-01-2012 20:39

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

Re: CLEO 4 для GTA San Andreas

var
    27@: int
    33@: int
end
if
    27@ > 33@

Last edited by DK22Pac (07-01-2012 20:40)


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#298 14-03-2012 22:03

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

Re: CLEO 4 для GTA San Andreas

CLEO4 SDK
Игра вылетает, если добавляю опкод с неопределённым кол-вом параметров (-1).
Хотел добавить опкод

0D00: store_memory_array 0xB7C4D6 elements 3 size 2 to 0@ 1@ 2@

Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#299 29-07-2012 18:52

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

Re: CLEO 4 для GTA San Andreas

Здравствуйте, ребята, запилил, значит, 100 дополнительных опкодов.

http://www.gtaforums.com/index.php?showtopic=518780

Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#300 30-07-2012 19:21

wmysterio
Registered: 04-03-2011
Posts: 214
Website

Re: CLEO 4 для GTA San Andreas

DK22Pac wrote:

Здравствуйте, ребята, запилил, значит, 100 дополнительных опкодов.

http://www.gtaforums.com/index.php?showtopic=518780

Круто! Жаль только на английском описание опкодов (
Особенно понравилась конкатенация!

Offline

Board footer

Powered by FluxBB