You are not logged in.
Спасибо за этот проект!
@Shag, можно попробовать запись значения переменной одного скрипта в ini файл и чтение этого значения другим скриптом, вот только, как это сопоставится с очерёдностью выполнения скриптов.
А, кстати, вот и вопрос: в каком порядке загружаются и выполняются скрипты при, допустим, одном wait 0 в каждом скрипте?
А новые опкоды только для exe 1.0 или 1.1 тоже поддерживается?
Есть ли возможность "восстановить" следующие опкоды для VC и III:
0681: attach_object 71@ to_car 60@ with_offset 0.5 0.3 0.3 rotation 0.0 0.0 0.0 0682: detach_object 38@(119@,4i) 0.0 0.0 0.0 collision_detection 0 0683: attach_car 208@ to_car 188@ with_offset 0.0 -4.6 0.65 rotation 15.0 0.0 0.0 0684: detach_car 208@ 20.0 180.0 0.0 collision_detection 0 0893: put_trailer 37@ on_cab 34@ 07AC: detach_trailer 37@ from_cab 34@
и для III:
0464: put_actor 99@ into_turret_on_car 68@ at_car_offset 266@ 267@ 268@ position 0 shooting_angle_limit 0.0 with_weapon 0 0465: remove_actor $PLAYER_ACTOR from_turret_mode
Новые опкоды(включая дублирующие из клео4):
Если я правильно понял, то в этой версии получается некоторые опкоды прописаны дважды? Т.е. например: 05E7 и 0A97
прикладываю свои scm.ini + opcodes.txt
Посмотрел scm.ini и opcodes.txt, там:
0400=1,save_mayhem_time %1d%
0407=1,time_taken_defuse_mission = %1d%
а вот
Также восстановлены следующие опкоды:
подразумевалось это?
0400: create_coordinate $448 $449 $450 from_object $714 offset -0.277 -16.662 3.152
0407: create_coordinate $1202 $1203 $1200 from_car $1185 offset 0.0 -20.0 0.0
Было бы неплохо иметь какой-нибудь простенький пример скрипта для этих опкодов, чтобы сразу проверить работает или нет. Я имею в виду пример с scm функцией
Вот несколько примеров:
http://rghost.ru/8qJhwQVns
Про компоненты, если есть scm функции, которые хотелось бы превратить в опкод, просьба выложить здесь.
Из того. что я проверил в скриптах:
gta3 1.0 (gta3 1.1) 0x52E660 (0x52E8A0) // IsComponentPresent 0x545930 (0x545B30) // GetDoorStatus 0x52EF90 (0x52F1D0) // IsDoorFullyOpen 0x52E750 (0x52E990) // CAutomobile__OpenDoor 0x5458E0 // GetComponentStatus 0x4B9160 (0x4B9250) // CMatrix_SetRotateXOnly 0x4B91F0 (0x4B92E0) // CMatrix_SetRotateYOnly vc 1.0 (vc 1.1) 0x59D1D0 (0x59D1F0) // IsComponentPresent 0x5A9810 (0x5A9830) // GetDoorStatus 0x59C890 (0x59C8B0) // IsDoorFullyOpen 0x59CF50 (0x59CF70) // CAutomobile__OpenDoor 0x645280 (0x6452D0) // RwFrameRotate 0x4DF620 (0x4DF640) // CMatrix_SetRotateXOnly 0x4DF590 // CMatrix_SetRotateZOnly 0x4DF6B0 (0x4DF6D0) // CMatrix__setPos (Z Y X) 0x644AD0 // RwFrameDestroy 0x5A9850 // GetComponentStatus 0x4DF240 (0x4DF260) // CPlacable__setRotation
Хорошо бы ещё оформить в опкоды вот это
Хорошо бы по-возможности добавить опкоды для работы с ini файлами, внешними звуковыми файлами, битами, компонентами моделей (особо интересует поиск компонента по его названию).
exe 1.0
05DF: write_memory 0x5599C2 size 5 value 0x90 virtual_protect 1 // hide zone name
05DF: write_memory 0x559E8E size 5 value 0x90 virtual_protect 1 // hide car name
exe 1.1
05DF: write_memory 0x5599E2 size 5 value 0x90 virtual_protect 1 // hide zone name
05DF: write_memory 0x559EAE size 5 value 0x90 virtual_protect 1 // hide car name
Да, я уже почти закончил с версией для III. Осталось только сделать опкоды поиска.
Это хорошо! Опкоды для работы с ini файлами и опкоды для работы с внешними звуковыми файлами будут?
Список новых опкодов можно посмотреть?
Огласите весь список пожалуйста. 
После потери своих же исходников для CLEO III, желания писать "по новой" совсем не было... Но вчера что-то перевернулось.
Т.е. новая версия клео всё же будет? 
А лучше сделать возможность настраивать временной промежуток для автосохранения.
Это в СА только остался весь "мусор" в ексе. В 3/вс есть только функции, которые реально используются в игре.
В GTA3 есть все три такие функции так же, как в SA. В вайсе нашёл только две из них. Либо плохо искал, либо их действительно только две из трёх, но это довольно странно. 
Кто-нибудь находил адрес CMatrix__rotateAroundY ? Вроде уже всё просмотрел, но не могу найти.
В SA есть в VC тоже должен быть аналогичный адрес или его нет? Но CMatrix__rotateAroundX и CMatrix__rotateAroundZ есть. Разве могут два из трёх подобных адресов быть, а третьего нет?
Спасибо за наводку на смещение 0x1F9. 
Подскажите пожалуйста, как узнать включен или выключен двигатель на транспорте в VC. По какому-то смещению в структуре транспорта это наверняка есть?
Ну и поставь +5 из имеющегося списка (UTC+05:00) Pakistan
В чём проблема?
И, что не один часовой пояс, что там есть не подходит?
В профиле
Какую проблему?
Зависание игры при показе названия транспорта и районов после использования в скриптах enable_text_draw
Проблему с текстом никто пока не решил?
ну вот же
отключать вывод текста районов и тачек, а вместо него делать свой.
Поздравляю всех пользователей и гостей форума с наступающим 2015-м Новым Годом! Желаю здоровья, материального благополучия и мира.
Спасибо! Теперь получил размер плагина 4 КВ, совсем другое дело.
Ага так робит.
Спасибо!
Ещё вопрос: при компиляции asi плагинов в настройках, какие параметры лучше выставить, чтобы:
1) плагин работал у тех пользователей, где не установлен Microsoft Visual C++
2) размер плагина при этом был бы минимальным
а то у меня получился размер этого плагина 33 КВ
для сравнения посмотрел размер CLEO.asi = 16 КВ
VC_SCMLOG.asi = 11,5 КВ
мда... видно рано мне ещё за плагины браться,
С++ только начал изучать...
в общем не получается, сделал вот так:
#include <Windows.h>
#include <CPatch.h>
#define gGameVersion (*(unsigned int *)0x601048)
#define GTA_VC_1_0 0x53FF1B8B
#define GTA_VC_STEAM 0xF04F883
#define GTA_VC_1_1 0x783EE8
int gVersion;
unsigned int gLastTimeKeyPressed;
unsigned int gTimer;
int gInitPerFrame;
int gFunc;
DWORD pMoney;
void Thread()
{
switch(gGameVersion)
{
case GTA_VC_1_0:
gVersion = 0;
break;
case GTA_VC_1_1:
gVersion = 1;
break;
case GTA_VC_STEAM:
gVersion = 2;
break;
}
/*if (gVersion == 0)
{
unsigned int* gTimer = (unsigned int *)0x974B2C;
int* gInitPerFrame = (int *)0x4A5D91;
int* gFunc = (int *)0x5522B0;
DWORD* pMoney = (DWORD*)0x94ADC8;
}
else if (gVersion == 1)
{
unsigned int* gTimer = (unsigned int *)0x974B34;
int* gInitPerFrame = (int *)0x4A5DB1;
int* gFunc = (int *)0x5522D0;
DWORD* pMoney = (DWORD*)0x94ADD0;
}*/
}
void OurFunc();
BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
if(reason == DLL_PROCESS_ATTACH)
{
Thread();
CPatch::RedirectCall(gInitPerFrame, OurFunc);
// Обнуляем таймер
gLastTimeKeyPressed = 0;
}
return TRUE;
}
void OurFunc()
{
// Проверяем нажатие клавиши "M" и таймер (если прошлa 1 секундa после последнего нажатия клавиши)
if(HIBYTE(GetKeyState(0x4D)) == 0xFF && gTimer - gLastTimeKeyPressed > 1000)
{
if (gVersion == 0)
{
unsigned int* gTimer = (unsigned int *)0x974B2C;
int* gInitPerFrame = (int *)0x4A5D91;
int* gFunc = (int *)0x5522B0;
DWORD* pMoney = (DWORD*)0x94ADC8;
}
else if (gVersion == 1)
{
unsigned int* gTimer = (unsigned int *)0x974B34;
int* gInitPerFrame = (int *)0x4A5DB1;
int* gFunc = (int *)0x5522D0;
DWORD* pMoney = (DWORD*)0x94ADD0;
}
//Добавляем денег игроку
pMoney += 1000;
// Устанавливаем новое время последнего нажатия клавиши
gLastTimeKeyPressed = gTimer;
}
// Вызываем стандартную функцию игры (0x5522B0)
((void (__cdecl *)())gFunc)();
}ни один из вариантов не работает
Кому не сложно поправьте код до рабочего и правильного варианта.