Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - mfisto

Страницы: 1 2 [3] 4 5 ... 12
31
Вот этот день снова настал, у Виталия aka Sektor снова день рождения! Поздравляем его сердечно от всей души! Пусть его сайт процветает и будет еще лучше! Успехов тебе, наш админ!

32
Общие вопросы / Re: Помощь с float в CLEO
« : Март 03, 2016, 07:28:31 pm »
Все дело в том, что значения с точкой игра в GTA 3 хранит по иному, по этому тебе надо превратить это значение в HEX. Т.е. в тот вид в каком число будет в HEX, тогда сработает.

33
Общие вопросы / Re: Помощь с CLEO
« : Февраль 21, 2016, 10:04:26 pm »
Тебе просто надо записать следующее:

0A8C: write_memory 0x005005D4 size 1 value 1 virtual_protect 1
0A8C: write_memory 0x0050C6DC size 1 value 1 virtual_protect 1

34
Моды / Re: vice-37
« : Январь 31, 2016, 02:11:18 am »
Новые баги появились, но уже не такие значительные, да пусть ДК тоже напишет что-нибудь, если конечно прочтет это.

35
Моды / Re: vice-37
« : Январь 26, 2016, 12:22:39 am »
Никто не написал еще а я добавлю тогда: решен баг с заскинеными моделями; дело движется!   ;)

36
Моды / Re: vice-37
« : Июль 19, 2015, 04:44:11 pm »
Еще чуть-чуть и будет снова здорово! Решить бы этот баг... ???

37
Общие вопросы. / Re: Справка по движку.
« : Июнь 25, 2015, 02:45:34 pm »
С помощью ASI лоадера Sektor'а загрузка асишек при старте exe, все учтено.

Там еще есть загрузка dll с помощью этого лоадера, Sektor просто не стал давать имя плагину asi и все, ты вообще скачивал библиотеку перед тем как спрашивать?

38
Общие вопросы. / Re: Справка по движку.
« : Июнь 24, 2015, 06:27:31 pm »
Во-первых, в LUA многие функции уже встроены.
Во-вторых, их очень много.
В-третьих, скрипты в виде опкодов - это извращения для скриптора.
В-четвертых, гораздо больше возможностей. Например те же переменные, к тому же это не хук, а полностью переписанная система. Поэтому понятий поток в том виде что присутствовал в scm отсутствует. Здесь полная свобода действий, нет ограничений. Нужно записать выражение прямо в функции - пожалуйста, работа с текстом, да хоть какая - пожалуйста.
В-пятых, прописываются все мельчайшие подробности от начала и до конца даже функция Wait() задается по желанию. Таймер установлен как функция GlobalTimer() и от нее пляшем.
В-шестых, задаются события, которых небыло в scm.

Итог: никаких фокусов, никакого шаманства, все открыто, прямо, точно, доступно. Нужна алгебраическая часть - пожалуйста, геометрическая - пожалуйста, вероятность - пожалуйста, побитовые операции - пожалуйста, понятия ограничения таких как номер опкода просто не существует, сколько хотим функций столько и будет, самодельная функция - пожалуйста. Оптимизация - полная. Большой скрипт - никаких тормозов, большой цикл прохождения по пулу без wait - пожалуйста, и никаких подвисов. С помощью ASI лоадера Sektor'а загрузка асишек при старте exe, все учтено.

39
Моды / Re: D3D8 мод для GTA VC.
« : Июнь 20, 2015, 11:02:01 pm »
Потрясно, так можно целые дома наверное строить!

40
Внимание всем следящим за новостями по LUA! Список полностью описан.

41
Обзоры/Идеи / Re: Функция AttachActorToEntity
« : Июнь 07, 2015, 07:19:24 pm »
Ты в примере забыл загрузить сам грузовик, а вместо этого грузишь MULE.

42
С помощью функции require можно делать перегрузку скриптов при начале новой игры, либо загрузке сохранения не выходя из игры. Для этого нужно провернуть небольшой фокус.

Пишем в области события OnStartGame()

Код: Lua
  1. package.loaded["scripts/start"] = nil
  2. require "scripts/start"

В скрипте start пишем необходимые строчки и усе...Захотели изменить стартующие скрипты, поменяли файл start, сохранили, запустили игру, новую или загрузку, и все дело в шляпе.

43
Дорогие друзья, в это теме мы будем делиться с вами разными функциями, написанными на движке LUA. Итак...
Начнем с того, что писать функции гораздо проще, чем просто опкодовой системой, поскольку мы можем вписывать вычисления в любую структуру записи функции LUA.
Что здесь важно знать: что такое память, сколько байтов нужно прочитать-записать, можно ли прочитать или записать адреса.

Функции с помощью которых можно работать с памятью:
med_ReadFloat(adress) - читает 4 байта с точкой
med_ReadInt(adress) - читает 4 байта
med_ReadWord(adress) - читает 2 байта
med_ReadByte(adress) - читает 1 байт
med_WriteInt(adress, var) - пишет 4 байта
med_WriteWord(adress, var) - пишет 2 байта
med_WriteByte(adress, var) - пишет 1 байт
med_WriteFloat(adress, var) - пишет 4 байта с точкой

med_AllowEditingMemory(adress, Int) - обозначение памяти для работы в ней в дальнейшем (в этом случае можно записывать любую память, даже защищенную)
med_EndEditingMemory() - освобождение обозначенной памяти

med_NewObject(Int) - выделение памяти для создания своей структуры
med_DeleteObject(pointer) освобождение памяти структуры

med_FLOAT_TO_HEX(var) - спец команда для обозначения значения с точкой в памяти как 4 байта (используется для записи в память)

Вот пример одной из функций взято из базы Вайса

Код: Lua
  1. function SFindGroundZFor3DCoord(x, y, z, bool_flag)
  2.         local bool_pointer = med_NewObject(1);
  3.         local result_pointer = med_NewObject(4);
  4.  
  5.         if (bool_flag ) then
  6.                 med_WriteByte(bool_pointer, 1)
  7.         else
  8.                 med_WriteByte(bool_pointer, 0)
  9.         end
  10.  
  11.         local float_result = med_CallFuncF(0x04D53A0, 4, med_FLOAT_TO_HEX(x), med_FLOAT_TO_HEX(y), med_FLOAT_TO_HEX(z), bool_pointer );
  12.  
  13.         -- результат тоже нужно конвертить.
  14.         med_WriteInt( result_pointer , float_result )
  15.         float_result =  med_ReadFloat( result_pointer )
  16.  
  17.         med_DeleteObject( result_pointer )
  18.  
  19.         med_DeleteObject( bool_pointer )
  20.         return float_result
  21. end

Затем такую функцию можно вызывать так-как все функции нах-ся в одном можно сказать "теле".
Вызывать просто:
Код: Lua
  1. local Zcoord = SFindGroundZFor3DCoord(xcoord, ycoord, zcoord, true)

Добавил:
Подправил немного функцию вот теперь корректно...

44
ну вот пример моих скриптов:

первый скрипт создания ячейки:

{$CLEO}
thread 'GACTOR'
05F7: 0@ = label @buferofactors offset // тут резервируем 0@ переменную под указатель на буфер
while true // создаем постоянный цикл
    wait 0
    if
        05EF: 15@ = random_actor_near_point 0.0 0.0 0.0 in_radius 100000.0 find_next 0 pass_deads 1 //IF and SET // начинаем поиск педов
    then
        repeat
            0085: 14@ = 0@ // (int) //используем временную переменную
            12@ = -1
            11@ = 0
            10@ = 0
            while true // создаем цикл для поиска хендла данного актера
                if
                    11@ == 200  // если достигнуто 200 ячеек то выход (в буфере как раз 200 строк)
                then
                    break
                end
                05E0: 13@ = read_memory 14@ size 4 virtual_protect 0 // читаем текущую ячейку, где хранится хендл
                if
                    003B:   13@ == 15@  // (int) // если хендл найден то не записываем по второму разу данный хендл
                then
                    12@ = -1 // для этого ставим доп переменной = -1
                    break // и сразу выход из поиска данного хендла
                else
                    if and
                        13@ == -1 //если мы находим попутно что строка содержит = -1 то запоминаем
                        10@ == 0 //  через доп переменную 10@ которую используем как флаг
                    then
                        0085: 12@ = 11@ // (int) // сохраняем первую попавшуюся строку содерж = -1 хендл в доп переменной 12@
                        10@ = 1
                    end
                end
                14@ += 8 // так в одной ячейке два поля хендл и еще одна по 4 байта каждая получает как раз = 8, скачем через 8 байт
                11@ += 1 //счетчик строчек увеличиваем
            end
            if
                12@ <> -1 // по результату пред поиска смотрим нашли мы строчку или нет
            then
                0085: 14@ = 0@ // (int)
                12@ *= 8
                005A: 14@ += 12@  // (int)
                05DF: write_memory 14@ size 4 value 15@ virtual_protect 0 // если да то заносим данный хендл
            end
        until 85EF: 15@ = random_actor_near_point 0.0 0.0 0.0 in_radius 100000.0 find_next 1 pass_deads 1 //IF and SET //продолжаем поиск
    end
end

:buferofactors //буфер актеров
hex
    FF FF FF FF  00 00 00 00 // первые 4 байта идут под хендл по умолчанию это = -1
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
    FF FF FF FF  00 00 00 00
end

Ну и скрипт удаления:

{$CLEO}
thread 'RACTOR'
while true
    wait 0
    05ED: 0@ = thread 'GACTOR' pointer // получаем указатель первого скрипта
    if
        0@ <> 0 // проверяем что он существует
    then
        0@ += 48 // переходим к смещению 0@ локальной переменной первого скрипта
        05E0: 0@ = read_memory 0@ size 4 virtual_protect 0 // считываем данное значение
        break // выходим из цикла
    end
end
while true // определяем вечный цикл
    wait 0
    while 13@ < 200 // определяем второй цикл поиска
        05E0: 1@ = read_memory 0@ size 4 virtual_protect 0 // читаем данную строчку
        if
            1@ == -1 // если хендл = -1 пропускаем
        then
            13@ += 1
            0@ += 8
            continue
        end
        05E6: 15@ = actor 1@ struct // иначе находим указатель структуры актера
        if
            15@ == 0 // если актер не существует
        then
            0085: 14@ = 0@ // (int) //используем времен пер 14@
            05DF: write_memory 14@ size 1 value -1 virtual_protect 0 // здесь и далее пишем -1 почему так? это глюк Клео нельзя сразу записать -1 в 4 байта (недоделка Клео)
            14@ += 1
            05DF: write_memory 14@ size 1 value -1 virtual_protect 0
            14@ += 1
            05DF: write_memory 14@ size 1 value -1 virtual_protect 0
            14@ += 1
            05DF: write_memory 14@ size 1 value -1 virtual_protect 0
            14@ += 1
            05DF: write_memory 14@ size 4 value 0 virtual_protect 0 // во вторые 4 байта пишем 0
            13@ += 1
            0@ += 8
        else
            13@ += 1
            0@ += 8
        end
    end
    05ED: 0@ = thread 'GACTOR' pointer // так как переменных не хватает заново находим 0@ локальную переменную первого скрипта
    0@ += 48
    05E0: 0@ = read_memory 0@ size 4 virtual_protect 0
    13@ = 0
end //и начинаем поиск погибших актеров еще раз

А теперь в любом месте можно в скрипте использовать ячейки, достаточно найти указатель первого скрипта, выйти на 0@ переменную и создать цикл поиска данного хендла в буфере.

Тут есть важный момент, если ты создаешь актера и тебе сразу же надо использовать ячейку, то надо просто опять найти указатель первого скрипта, найти 0@ пер., потом буфер, и найти в цикле не занятый хендл то есть = -1 и все, записать туда, т.е как бы опередить первый скрипт, при этом ничего не будет нарушено, как я уже объяснял ранее благодаря смыслу опкода wait.

45
Попробуй иначе, например создавать скрипт-буфер для дополнительных ячеек структуры для педов, или машин, или объектов.
Скажем один скрипт ведет поиск и создание ячейки, а другой удаление, а уже в самих скриптах где тебе понадобятся ячейки будешь только ссылаться на буфер, я так стал делать...

Страницы: 1 2 [3] 4 5 ... 12