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

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


Сообщения - Saint

Страницы: [1] 2 3
1
Отключение прицела/атаки у игрока:
Код: Text
  1. 0AC8: 0@ = allocate_memory_size 1898
  2. 0AB1: call_scm_func @COPY_MEMORY 4 0x53497B 0@ 1898 2 // CopyFrom, CopyTo, Size, Step
  3. wait 0 // IMPORTANT WAIT!!!
  4. 0A8C: write_memory 0x53497B size 1898 value 0x90 virtual_protect 1 // Disable Player Aim and Attack
Включение обратно:
Код: Text
  1. 0AB1: call_scm_func @COPY_MEMORY 4 0@ 0x53497B 1898 2 // CopyFrom, CopyTo, Size, Step
  2. 0AC9: free_allocated_memory 0@
SCM-функция COPY_MEMORY:
Код: Text
  1. :COPY_MEMORY
  2. 0006: 6@ = 0
  3.  
  4. :COPY_MEMORY_CYCLE
  5. 001D:   2@ > 6@
  6. jf @COPY_MEMORY_RETURN
  7. 0085: 4@ = 0@
  8. 005A: 4@ += 6@
  9. 0A8D: 5@ = read_memory 4@ size 3@ virtual_protect 1
  10. 0085: 4@ = 1@
  11. 005A: 4@ += 6@
  12. 0A8C: write_memory 4@ size 3@ value 5@ virtual_protect 1
  13. 005A: 6@ += 3@
  14. jump @COPY_MEMORY_CYCLE
  15.  
  16. :COPY_MEMORY_RETURN
  17. 0AB2: ret 0

Суть в чем: чтобы заблочить возможность целиться и атаковать, нужно занопить по адресу 0x53497B 1898 байт. Но чтобы потом вернуть всё обатно - нужно предварительно скопировать оригинальные 1898 байт в свежесозданный буфер, что скрипт и делает.

Где это может пригодиться? Ну например - в некоторых интерьерах или стелс-миссиях, где игрок не должен будет никого атаковать.

тоесть если мы будем нажимать кнопку огонь (ЛКМ) то игрок не будет выполнять никаких действий?

2
Saint, а как изменить путь сохранения?

.text:00601AB9
.text:006022A9

.data:006D63D8 5C 47 54 41 20 56 69 63+aGtaViceCityUse db '\GTA Vice City User Files',0  //

вот адресса памяти отвечающие за папку GTA Vice City User Files

3
Saint, а как изменить путь сохранения?

.text:00601AB9
.text:006022A9
.data:006D63D8

вот адресса памяти отвечающие за папку GTA Vice City User Files

4
из исходников vcmp 0.1c

BOOL SubclassGameWindow()
{
HWND hwndGameWnd = pGame->GetMainWindowHwnd();

SetWindowText(hwndGameWnd, "My GTA");

if (hwndGameWnd)
{
hOldProc = (WNDPROC)GetWindowLong(hwndGameWnd, GWL_WNDPROC);
SetWindowLong(hwndGameWnd, GWL_WNDPROC, (LONG)NewWndProc);
return TRUE;
}

return FALSE;
}

5
Спасибо, все встало на свои места. Для приведенного примера тогда надо указать так:

Код: C++
  1. static CPool<CObject, CCutsceneObject> *& pObjectPool;
Код: C++
  1. CPool<CObject, CCutsceneObject> *& CPools::pObjectPool = *(CPool<CObject, CCutsceneObject> **)0x094DBE0;

это позволит удалять любые объекты (постоянные) карты? такие как дома, пальмы и т.д.

6
Хз, мб убрать кол?

Или:
Непосредственно у готового объекта в структуре выставить пруфы(0x052 и 0x053) нулевую массу(0x0B8), чтобы висел в воздухе и 999999.99 сопротивление(0x0BC).

К сожалению, на практике не сталкивался, но по логике второй вариант должен сработать, т.к. у меня срабатывало обратное(делал фонарные столбы более легкими для сбивания)

в принципе кое-чего удалось достич меняя мараметры массы и флаги, осталось отключить повреждаемость объектов (тогже мяча, когда в него врезаешься на машине или бочки (350) когда в неё стреляешь она всё равно взрывается, даже если утановленны иммунитеты.

кто что думает?

7
Хз, мб убрать кол?

Или:
Непосредственно у готового объекта в структуре выставить пруфы(0x052 и 0x053) нулевую массу(0x0B8), чтобы висел в воздухе и 999999.99 сопротивление(0x0BC).

К сожалению, на практике не сталкивался, но по логике второй вариант должен сработать, т.к. у меня срабатывало обратное(делал фонарные столбы более легкими для сбивания)

нет, это не то, объект должен стать частью карты сbuilding

8
ещё вопрос по теме:

как создать статический объект например мяч (526) который нельзя уничтожить и сдвинуть с места?

9
больше спасибо за ваши ответы, очень помогли, буду теперь думать что делать...

10
Значит, дело в наличии объекта в "\data\object.dat", как я писал выше.

скорее всего из-за того что он не прописан в файле data\maps\generic.ide

но как решить задачу, не редактируя файлов игры вот в чём вопрос

11
Точно не помню(давно этим не занимался), но вроде опкод 0107 предназначен для объектов из "\data\object.dat", для всех остальных же есть опкод 029B(могу ошибаться и вполне возможно, что и для 029B необходимо, чтобы объект был прописан в "\data\object.dat").

не тот, не тот опкод не могут создавать объекты норм с коллизией чтобы они были как часть карты, вот я и спрашиваю как это правильно делать для примера я выбрал модель 3064


12
Это какие-то особенные проблемы мультиплеера, поскольку у объекта 3064 есть коллизия.

ну про то что у него есть коллизия я знаю, и проблема эта не мультиплеера, мультиплеер - эта таже самая игра в которую внедрёд сетевой код.

у меня объекты в данный момент создаются чрез опкод 0107, большинство из них создаются именно так без коллизии, поэтому я и спрашиваю как правильно создавать?

13
вот есть созданный объект



на стать на него нельзя



вопрос как правильно его создать?

14
Общие вопросы / Re: Помощь с CLEO
« : Декабрь 08, 2018, 03:04:39 am »
спасибо большое за информацию, разобрался, всё работает

15
Общие вопросы / Re: Помощь с CLEO
« : Декабрь 03, 2018, 06:32:18 pm »
не могу создать

только код не в клео а С++

// const SCRIPT_COMMAND scatter_particles = { 0x039D, "ifiiiiffffff" }; // scripting.h

ScriptCommand(&scatter_particles, iType, fSize, byteR, byteG, byteB, iTime, PosX, PosY, PosZ, speedX, speedY, speedZ); // = { 0x039D, "ifiiiiffffff" };

в игре ничего нет

Страницы: [1] 2 3