You are not logged in.
А как ты ее получил?
Есть много способов
Я например с помощью PEiD с соответствующим плагином.
При гибели игра виснит.
Нужно для таких случев договориться о каком-то едином exe-шнике.
Контрольная сумма чистого, не чем не пропатченного, gta_sa.exe. (У меня)
CRC32: ACFF1F28
if and
0@ == 0 // integer values
80FE: not actor $PLAYER_ACTOR 0 2510.261 -1671.304 13.4114 radius 25.0 25.0 15.0
00FE: actor $PLAYER_ACTOR 0 2510.261 -1671.304 13.4114 radius 35.0 35.0 15.0
jf @NONAME_17_181ты никогда не выполнишь такое условие: одновременно БЫТЬ и НЕ БЫТЬ в одной и той же точке
Убери одну из 00FE, лучше первую (чтобы актер появлялся когда ты рядом).
Тут проверяется что игрок находится
25 < местоположение < 35
Может есть спец. опкод для этого?
Соответственно, если игрок появляется вне этой зоны клоун непоявиться, надо будет сначало убежать на расстояние 25 < местоположение < 35, а потом вернуться.
У меня этот скрипт прекрасно работает 
блин, без перезагрузки имга плохо, по сути функциональности не много прибавилось. Будет работать только для скм-ов с одинаковыми скриптами
Это да. Сейчас вообще времени мало, разбирать придется в свободное время. А свободного времени совсем мало.
погоди, т.е. если я пишу в скрипте 03ad он пойдет на загрузку имга?
Нет. Не должен. Это опкод 3ad так выглядит. А код имг идет после джампа.
да обе, все строки хранятся как null-terminated
Я так и знал. Мне кажется это только увеличит код.
сейвы работают
Точно? Я их не проверял.
Если все нормально, то можно, потом если что изменить недолго.
Нет, все равно висло. Не стал разбтраться почему, написал так
PUSH 1 MOV ECX,ESI CALL 00464080 XOR AL,AL JMP end
Пришлось убрать одну проверку.
Насчет сравнивания строк: обе строки должны оканчиваться нулом?
зы
mov ecx,esi можно не писать
При первом запуске действительно так происходит - текстура и первые 2 буквы, почему???
У меня все нормально. Хотя поле детально я не тестил.
Ты не учел важную деталь! В 03ad нужно добавить xor al, al перед end чтобы опкод считался нопом а не unsupported игра вылетает когда на этот опкод приходит
Исправил.
2Seemann:
2Capushon:
Смотрити в приват.
хе, а я уже релизить готов )
Лучше сначало все баги отловить. Если я успею что нибудь до завтра раскопать можно и релизить. Если нет то выложу как есть.
Seemann
на сессии...
А уменя с завтрашнего дня.
:):)
Ты не учел важную деталь! В 03ad нужно добавить xor al, al перед end чтобы опкод считался нопом а не unsupported игра вылетает когда на этот опкод приходит
Спасибо за информацию обнулим.
Работает и на оригинальной игре, но вот в мультимоде поначалу опять текстура не убиралась и скрипты не шли. Но это вряд ли относится к делу.
Это при первом старте?
Назови патч более конкретно, плиз, что-нибудь вроде SA Mission Packs Fix, а то просто патч ни о чем не говорит. Хотя конечно - твое право
Торопиться некуда это тестовя версия. Когда с загрузкой разберусь посмотрим.
ссылку на патч убрал, чтобы не ушел раньше времени, не против?
Да нет 
а имя скрипта какое? попробовал мультимод - скрипты не работают, хотя в остальном вроде норм (еще не проверял в отладчике)
mpack1-script1.img
mpack2-script2.img
...
ps где мультимод можно скачать
правда могут возникнуть нестыковки, при несовпадении регистров (lowercase, uppercase). кстати, у тебя тоже такое возможно (буквы S, s различаются).
Они вроде приводятся к верхнему регистру хотя х.з.
Или попробовать CompareText, там вроде case-insensetiveОни
Есть апишная функция lstrcmpi там регистр не важен.
-----
Никак немогу заставить при загрузке читать gta.dat.
Небольшие изменения в патче. Процедуру вставил на место опкода 3ad. Занопил 8 байт
00468F8A . 90 NOP 00468F8B . 90 NOP 00468F8C . 90 NOP 00468F8D . 90 NOP 00468F8E . 90 NOP 00468F8F . 90 NOP 00468F90 . 90 NOP 00468F91 . 90 NOP 005B915B . E8 ABE4E4FF CALL gta_sa.0040760B 0040760B $ E8 4FD10700 CALL gta_sa.0048475F 0048475A > \E9 3C0F0000 JMP gta_sa.0048569B ; Case 3AD of switch 00483BF2 0048475F /$ 8A50 05 MOV DL,BYTE PTR DS:[EAX+5] 00484762 |. 80FA 53 CMP DL,53 00484765 |. 75 20 JNZ SHORT gta_sa.00484787 00484767 |. 8A50 0C MOV DL,BYTE PTR DS:[EAX+C] 0048476A |. 80FA 53 CMP DL,53 0048476D |. 75 18 JNZ SHORT gta_sa.00484787 0048476F |. 8A15 1029B700 MOV DL,BYTE PTR DS:[B72910] 00484775 |. 80FA 00 CMP DL,0 00484778 |. 74 0D JE SHORT gta_sa.00484787 0048477A |. 80C2 30 ADD DL,30 0048477D |. 8850 12 MOV BYTE PTR DS:[EAX+12],DL 00484780 |. C740 13 2E494D47 MOV DWORD PTR DS:[EAX+13],474D492E 00484787 \> C3 RETN 00484788 90 NOP 00484789 90 NOP 0048478A 90 NOP 0048478B 90 NOP 0048478C 90 NOP 0048478D 90 NOP
И сделать совместимость с ксионовским патчем, у меня он стоял
Вот попробуй это:
cсылочку убрал пока 
Так мультимод паком на оригинале работает, правда скрипты нет, но это надо нопить то условие.
Непонял 
И сделать совместимость с ксионовским патчем, у меня он стоял
Вот из-за этого, наверно, патч и не ставиться.
Есть процедура CompareStrings, она должна помочь.
Поподробнее. Я только lstrcmp и lstrcmpi знаю.
зы Как проверить в игре что опр. scriptX.img запустился
Я чето не врубился как там пропатчилось:
Нет, у меня там пусто.
Перенеси в др. место.
Можно вместо пустых опкодов добавить.
я кстати когда тестировал, игра не показывает больше 10 паков на экране, не знаю почему. Так что можно и цифрами.
Это я тоже заметил.
попробуй edx вместо ecx, он свободный, не надо будет пуш/поп.
Да какая разница. Я даже не проверял, может игра и не вылетит
Хотя можно и заменить.
и, кстати, вторую проблему этот способ не решает.
Над этим я пока думаю, не заню за что зацепиться.
это обязательно нужно нопить, иначе игра не будет читать инфу о скриптах, записанную в скм (define scrtipt и пр.)! без этого все теряет смысл, даже если скрипты будут загружены, игра не будет их использовать
ну это легко поправить 
Как проверить в игре что опр. scriptX.img запустился
попробовал я, патч сказал byte not found, но вроде done. Игра при запуске вылетает
х.з. у меня все нормально попробуй пропатчить чистый gta-sa.exe, или все вручную можно сделать (олька рулит
)
Поставь бряк по адресу 005B915B и посмотри что у тебя в B72910
т.е на выходе получается script1.img?
Нет в зависимости от номера мпака на выходе получается:
mpack1 - scripta.img mpack2 - scriptb.img mpack3 - scriptc.img
Если надо цифры прибавляем не 40h а 30h только с цифрами получается до девяти, потом будут всякие символы, я первый раз сам с цифрами делал потом на буквы перешел.
Оригинальная игра, если ее запустить как мпак, выдает ошибку (пропатченная или нет без разницы) пока х.з. в чем дело.
Вобщем попробовала просто скомпилировать твой код - педа пока нет.
Смотри по этим координатам (около дома CJ) 2510.2615, -1671.3036, 13.4114
Если появляешься рядом с педом. Отбеги от него подальше затем вернись обратно.
8 байтов. Ее мы затираем нафик, либо меняем условие, чтобы игра читала сегмент скриптов всегда.
Зачем нопить 8 байт я так и не понял.
По адресу B72910 храниться номер запущенного мпака (byte), если 0, то загружается стандартная игра.
Вот так у меня выглядет процедура SetNewIMGDir
00856CD0 /$ 51 PUSH ECX ; Сохраняем ECX на всякий случай 00856CD1 |. 8A48 05 MOV CL,BYTE PTR DS:[EAX+5] ; Заносим в CL 6 символ 00856CD4 |. 80F9 53 CMP CL,53 ; Сравниваем 6 символ (в CL) с символом 'S' 00856CD7 |. 75 20 JNZ SHORT gta_saa.00856CF9 ; Если CL != 'S', то на выход 00856CD9 |. 8A48 0C MOV CL,BYTE PTR DS:[EAX+C] ; Заносим в CL 13 символ 00856CDC |. 80F9 53 CMP CL,53 ; Сравниваем 13 символ (в CL) с символом 'S' 00856CDF |. 75 18 JNZ SHORT gta_saa.00856CF9 ; Если CL != 'S', то на выход 00856CE1 |. 8A0D 1029B700 MOV CL,BYTE PTR DS:[B72910] ; По адресу B72910 берем байт, равный номеру запущенного мпака 00856CE7 |. 80F9 00 CMP CL,0 ; Сравниваем CL c нулем 00856CEA |. 74 0D JE SHORT gta_saa.00856CF9 ; Если CL == 0, то на выход 00856CEC |. 80C1 40 ADD CL,40 ; CL = CL + 40 так надо :) 00856CEF |. 8848 12 MOV BYTE PTR DS:[EAX+12],CL ; Добовлаем к строке (в EAX) символ CL 00856CF2 |. C740 13 2E494D47 MOV DWORD PTR DS:[EAX+13],474D492E ; Добовлаем к строке (в EAX) расширение '.IMG' 00856CF9 |> 59 POP ECX ; Восстанавливаем ECX 00856CFA \. C3 RETN ; Возвращаемся обратно
Здесь я проверяю чтобы 6 и 13 символы были "S" DATA\SCRIPT\SCRIPT.IMG
Вот короче байты кот. я патчил
RAW Offset | Old Byte | New Byte
-----------------+----------+----------
00006A0B 90 E8
00006A0C 90 C0
00006A0D 90 F6
00006A0E 90 44
00006A0F 90 00
001B855C B0 AB
004560D0 00 51
004560D1 00 8A
004560D2 00 48
004560D3 00 05
004560D4 00 80
004560D5 00 F9
004560D6 00 53
004560D7 00 75
004560D8 00 20
004560D9 00 8A
004560DA 00 48
004560DB 00 0C
004560DC 00 80
004560DD 00 F9
004560DE 00 53
004560DF 00 75
004560E0 00 18
004560E1 00 8A
004560E2 00 0D
004560E3 00 10
004560E4 00 29
004560E5 00 B7
004560E7 00 80
004560E8 00 F9
004560EA 00 74
004560EB 00 0D
004560EC 00 80
004560ED 00 C1
004560EE 00 40
004560EF 00 88
004560F0 00 48
004560F1 00 12
004560F2 00 C7
004560F3 00 40
004560F4 00 13
004560F5 00 2E
004560F6 00 49
004560F7 00 4D
004560F8 00 47
004560F9 00 59
004560FA 00 C3
А воспользоваться твоим кодом я не понимаю как. Где в нем Вася нападает на CJ? Мне надо, чтоб Вася нападал. И чтобы умирал как полагается
Дык, в коде написанно
// Другие проверки...
Вот туда добовляй что хочешь:
if and $SA_VASYA_FLAG == 1 00F2: actor $PLAYER_ACTOR near_actor $SA_VASYA radius 10.0 10.0 0 then 05E2: AS_actor $SA_VASYA kill_actor $PLAYER_ACTOR end
Или добавь сразу после создания актера команду 05E2: AS_actor $SA_VASYA kill_actor $PLAYER_ACTOR, вот так:
$SA_VASYA_FLAG = 1
$SA_VASYA.Create(CivMale, #WMOICE, 2510.2615, -1671.3036, 13.4114)
$SA_VASYA.Angle = 84.2641
$SA_VASYA_MARKER.CreateAboveActor($SA_VASYA)
05E2: AS_actor $SA_VASYA kill_actor $PLAYER_ACTOR