You are not logged in.
Т.е. мне нужна функция на апи, которая возвращает true, если кнопка была отпущена или нажимается (но не нажата). Не знаешь как сделать?
Попробуй через хуки или обрабатывай сообщения, посылаемые программой.
Кстати, ты как делал проверку нажатия?
SetTimer GetAsyncKeyState
Вот здесь посмотри: http://foolroot.nm.ru/satrainer.rar
2All:
satrainer.cleo - простенький трйнер:
http://slil.ru/24253660
Infinite Health F5 Infinite Ammo F6 Infinite Money F7 Freeze Time F8 Respect F9
listener:
В Express нету *.h файлов для компиляции.
З.Ы если есть-дайе пожалйста ссылку на Иду5 и краткий справочник по ассемблеру пожалуйста
В этом случае поиск по форуму используют
Не раз уже обсуждалось 
вот насчет Игромании спасибо за наводку, я и не знал, что этот бл**ский журнал что-то опять взял без спросу...
А имени автора там нет?
Хорошо что хоть так написали:
один из лучших gta-кодеров, Seemann
по сути одна тема, просто ссылки на разные посты. И так для любой темы
Как тогда еще можно сделать?
И вообще, создай уж тогда тему "Архив форума"
В каком разделе? В этом? И можно ли с 14 поста все переместить?
Там 90% лишнего, топиков всего несколько десятков, но они дублируются по сто раз в архиве. Нужно выкачивать только по ссылке
http://www.sannybuilder.com/forums/viewtopic.php?id=X
Я качал телепортом все подряд с адреса http://sannybuilder.com/forums/. Там действительно много лишнего: регистрация, поиск, пользователи, но дублирующихся не должно быть.
И вообще, создай уж тогда тему "Архив форума"
А что, туда писать?
Архив от 1.03.07 / 12:36 MSK
34,3 МБ ужались в 461 КБ, формат 7z
Вообще-то можно, кто бы еще этим занялся?..
Если будет возможность я мог бы скачать, хорошо что скорость позволяет
Сейчас попробую...
Что именно архивировать и как это будет выглядеть? Почему нельзя просто сохранить страницы (распечатать) если надо?
Можно, например, каждый месяц выкладывать полностью выкаченный форум. Так читать легче будет. Не у всех же безлимитный интернет, у меня вообще почасовой. Да и лучше любого FAQ будет 
2Seemann:
Можно сделать архив форума, чтобы в offline можно было почитать.
теперь бы ещё сюда добавить надо , как переводить код асма в хеш для дальнейшего использования в СБ .
Открой любую прогу в OllyDbg и вводи что надо. Выделяешь строчку, нажимаешь пробел, вводишь команду, нажимаешь ОК и т.д.
Может еще вот это пригодится:
http://wasm.ru/series.php?sid=17
попробуй для версии 1.1 еще сделать, совсем круто будет
Вот:
h..p://foolroot.nm.ru/sa_patch.rar
Так можно ?
:SNKCHP_970 0209: $money = random_int 1000 2000 Player.Money($PLAYER_CHAR) += $money 01E3: text_1number_styled 'IE30' 1000 5000 ms 1 // Earnings~N~~w~$~1~
аналог того, что ты сделал - можно просматривать память во время игры, видеть текущий адрес, менять значения и т.д. Реализовано через длл.
Посмотрю. Тоже хотел так делать, потом решил через скрипт.
ну это видимо фича игры, там просто одежда такая - специальная - она убирается после смерти . к твоему моду это отношение не имеет
Понятно.
Честно говоря не знаю, но попробую разобраться. А пока мне за каждую (любую) машину платят одну и ту же сумму (за то, что я ее пригнала).
Приведи часть кода, где деньги платят.
Протестировал:
1) если арестовывают, игра виснет, точнее не виснет, а ... , короче не знаю как это описать.
2) если погиб работает нормально, но появляешься без одежды.
Короче х.з. из-за чего, Player.Defined использую.
У меня есть магазин по скупке автомобилей. Если возможно, то как сделать так, чтобы каждый раз мне за авто платили разные суммы, но не меньше $1000? Или просто разные.
0099: $8224 = random_integer_0-to-65535 0208: 17@ = random_float -0.2 0.2001 0209: 17@ = random_int 0 10
Или надо что-то другое?
Это еще незаконченная версия, но все-таки решил выложить:
Что это:
Скрипт позволяет менять значения в памяти во время игры.
Как это работает:
Общий вид команды выглядит следующим образом:
<~>ADDR<ПРОБЕЛ>SIZE<ПРОБЕЛ>VALUE<TAB><Y>, где
ADDR – адрес;
SIZE – тип значения;
VALUE – значение.
ADDR и VALUE вводятся в шестнадцатеричном виде.
SIZE может принимать следующие значения B (BYTE – 1 байт), W (WORD – 2 байта), D (DWORD – 4 байта).
После нажатия на клавишу <TAB>, появится панелька с веденными данными (правда в десятичном виде), если все нормально жмете <Y>. Если что-то ведено неправильно придется начинать все заново.
Пример:
Во время игры набираем:
<~>B7CE50<ПРОБЕЛ>D<ПРОБЕЛ>3E8<TAB>
Смотрим на панельку:
12045904
4
1000
Нажимаем <Y>, прибавляется $1000
Не знаю, насколько это полезно и нужно, но вдруг кому пригодится.
Сам код:
create_thread @ADDR
// ----------
:ADDR
thread 'ADDR'
alloc($SizeBuffer1, 0x40) // 0A49A60h
alloc($SizeBuffer2, 0x41) // ~ + 4h
alloc($SizeBuffer3, 0x42) // ~ + 8h
alloc($AddrBuffer1, 0x43) // 0A49A6Ch
alloc($AddrBuffer2, 0x44) // ~ + 4h
alloc($AddrBuffer3, 0x45) // ~ + 8h
alloc($Value, 0x46) // 0A49A78h
alloc($Size, 0x47) // 0A49A7Ch
alloc($Address, 0x48) // 0A49A80h
alloc($ESI, 0x49) // 0A49A84h
$SizeBuffer1 = 0x30303030
$SizeBuffer2 = 0x30303030
$SizeBuffer3 = 0
$AddrBuffer1 = 0x30303030
$AddrBuffer2 = 0x30303030
$AddrBuffer2 = 0
$ESI = 0x969110
while true
wait 0
if
Player.Defined($PLAYER_CHAR)
then
03F0: toggle_text_draw 1
038E: draw_box position 0.0 0.0 width 170.0 height 60.0 color 150 15 85 alpha 150
045A: draw_text_1number 0.0 0.0 GXT 'NUMBER' number $Address // ~1~
045A: draw_text_1number 0.0 8.0 GXT 'NUMBER' number $Size // ~1~
045A: draw_text_1number 0.0 16.0 GXT 'NUMBER' number $Value // ~1~
if
00E1: player 0 pressed_key 4
then
0@ = -429863
&0(0@,1i) = 0xA49960
&0(0@,1i) += @GetParam
0572: run_asm_inject true
end
if
00E1: player 0 pressed_key 11
then
0@ = -429863
&0(0@,1i) = 0xA49960
&0(0@,1i) += @Store
0572: run_asm_inject true
end
end
end
:GetParam
hex
// GerParam:
60 // PUSHAD
33C0 // XOR EAX,EAX
B8 30303030 // MOV EAX,30303030
A3 609AA400 // MOV DWORD PTR DS:[A49A60],EAX
A3 649AA400 // MOV DWORD PTR DS:[A49A64],EAX
A3 6C9AA400 // MOV DWORD PTR DS:[A49A6C],EAX
A3 709AA400 // MOV DWORD PTR DS:[A49A70],EAX
33C0 // XOR EAX,EAX
33C9 // XOR ECX,ECX
B9 07000000 // MOV ECX,7
B4 00 // MOV AH,0
8B35 849AA400 // MOV ESI,DWORD PTR DS:[A49A84]
// begin:
8A06 // /MOV AL,BYTE PTR DS:[ESI]
3C 60 // |CMP AL,60
74 65 // |JE _finish
3C 20 // |CMP AL,20
74 57 // |JE _next
80FC 00 // |CMP AH,0
74 0C // |JE _value
80FC 01 // |CMP AH,1
74 0F // |JE _size
80FC 02 // |CMP AH,2
74 3C // |JE _addr
EB 50 // |JMP _finish
// _value:
8881 609AA400 // |MOV BYTE PTR DS:[ECX+A49A60],AL
EB 3A // |JMP _rout
// _size:
3C 42 // |CMP AL,42
74 0A // |JE _wrB
3C 57 // |CMP AL,57
74 12 // |JE _wrW
3C 44 // |CMP AL,44
74 1A // |JE _wrD
EB 3A // |JMP _finish
// _wrB:
C705 7C9AA400 01000000 // |MOV DWORD PTR DS:[A49A7C],1
EB 20 // |JMP _rout
// _wrW:
C705 7C9AA400 02000000 // |MOV DWORD PTR DS:[A49A7C],2
EB 14 // |JMP _rout
// _wrD:
C705 7C9AA400 04000000 // |MOV DWORD PTR DS:[A49A7C],4
EB 08 // |JMP _rout
// _addr:
8881 6C9AA400 // |MOV BYTE PTR DS:[ECX+A49A6C],AL
EB 00 // |JMP _rout
// _rout:
46 // |INC ESI
49 // |DEC ECX
EB 9F // |JMP _begin
// _next:
FEC4 // |INC AH
46 // |INC ESI
B9 07000000 // |MOV ECX,7
EB 95 // \JMP _begin
// _finish:
68 609AA400 // PUSH 0A49A60
E8 1C000000 // CALL Hex2Dword
A3 789AA400 // MOV DWORD PTR DS:[A49A78],EAX
68 6C9AA400 // PUSH 0A49A6C
E8 0D000000 // CALL Hex2Dword
A3 809AA400 // MOV DWORD PTR DS:[A49A80],EAX
83C4 08 // ADD ESP,8
61 // POPAD
C3 // RETN
90 // NOP
90 // NOP
90 // NOP
// Hex2Dword proc
8B5424 04 // MOV EDX,DWORD PTR SS:[ESP+4]
33C0 // XOR EAX,EAX
33C9 // XOR ECX,ECX
// _label1:
F602 FF // /TEST BYTE PTR DS:[EDX],0FF
8A0A // |MOV CL,BYTE PTR DS:[EDX]
74 1F // |JE _label4
80E9 61 // |SUB CL,61
78 0A // |JS _label3
// _label2:
C1E0 04 // |SHL EAX,4
42 // |INC EDX
8D4401 0A // |LEA EAX,DWORD PTR DS:[ECX+EAX+A]
EB EA // |JMP _label1
// _label3:
80C1 20 // |ADD CL,20
79 F1 // |JNS _label2
80C1 11 // |ADD CL,11
C1E0 04 // |SHL EAX,4
42 // |INC EDX
03C1 // |ADD EAX,ECX
EB DA // \JMP _label1
// _label4:
C3 // RETN
// Hex2Dword EndP
// end GetParam
end
:Store
hex
// Store:
60 // PUSHAD
33C0 // XOR EAX,EAX
33C9 // XOR ECX,ECX
A1 7C9AA400 // MOV EAX,DWORD PTR DS:[A49A7C]
83F8 01 // CMP EAX,1
74 0C // JE _byte
83F8 02 // CMP EAX,2
74 18 // JE _word
83F8 04 // CMP EAX,4
74 26 // JE _dword
EB 33 // JMP _end
// _byte:
33C0 // XOR EAX,EAX
A0 789AA400 // MOV AL,BYTE PTR DS:[A49A78]
8B0D 809AA400 // MOV ECX,DWORD PTR DS:[A49A80]
8801 // MOV BYTE PTR DS:[ECX],AL
EB 22 // JMP _end
// _word:
33C0 // XOR EAX,EAX
66 A1 789AA400 // MOV AX,WORD PTR DS:[A49A78]
8B0D 809AA400 // MOV ECX,DWORD PTR DS:[A49A80]
66 8901 // MOV WORD PTR DS:[ECX],AX
EB 0F // JMP _end
// _dword:
33C0 // XOR EAX,EAX
A1 789AA400 // MOV EAX,DWORD PTR DS:[A49A78]
8B0D 809AA400 // MOV ECX,DWORD PTR DS:[A49A80]
8901 // MOV DWORD PTR DS:[ECX],EAX
// _end:
61 // POPAD
C3 // RETN
// end Store
Endh..p://foolroot.nm.ru/sb_forum/devmode.0.1.rar
Внимание!!! Подстановка левых значений и адресов может привести к зависанию игры.
У меня туда не заходит
h..p://foolroot.nm.ru/gta.sa.patch.rar
Вот мой вариант (правда там только для версии 1.0) если еще кому нужен:
h..p://slil.ru/23888873
; файл PATCH.RC ; ----------------------[вырезать]------------------------------ #define IDD_DLG1001 1001 #define IDC_BUTTON1002 1002 #define IDC_BUTTON1003 1003 #define IDC_STATIC1004 1004 #define IDC_STATIC1005 1005 3001 ICON DISCARDABLE "patch.ico" IDD_DLG1001 DIALOGEX 0,0,169,44 CAPTION "GTA: San Andreas *patch*" FONT 8,"MS Sans Serif" STYLE 0x10c80800 EXSTYLE 0x00000000 BEGIN CONTROL "Patch",IDC_BUTTON1002,"Button",0x50010000,110,5,50,14,0x00020000 CONTROL "Exit",IDC_BUTTON1003,"Button",0x50010000,110,23,50,14,0x00020000 CONTROL "1. Enabled radio in noncivilian vehicles and bicycles.",IDC_STATIC1004,"Static",0x50000000,3,3,104,16,0x00000000 CONTROL "2. Pay'n'Spray repairs all vehicles.",IDC_STATIC1005,"Static",0x50000000,3,22,97,16,0x00000000 END ; ----------------------[вырезать]------------------------------ ; файл PATCH.ASM ; ----------------------[вырезать]------------------------------ .486 .model flat, stdcall option casemap: none include \masm32\include\kernel32.inc include \masm32\include\user32.inc include \masm32\include\windows.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib DlgProc PROTO :DWORD, :DWORD, :DWORD, :DWORD .const IDD_DLG equ 1001 IDC_PATCH equ 1002 IDC_EXIT equ 1003 .data FileName db "gta_sa.exe", 0 NewFileName db "gta_sa.exx", 0 ;Filesize dd 0DB7A00h CapOK db "Congratulation!", 0 MsgOK db "File successfull patched!", 0 CapNotFound db "File not found", 0 MsgNotFound db "Copy the patch to installed game dir and run again", 0 ;CapWrongSize db "Correct filesize is: 14383616 bytes", 0 ;MsgWrongSize db "Wrong filesize", 0 byte_replace1 dd 00h, 0 byte_replace2 dd 01B0h, 0 CarID dd 190h mult dd 24h byte_writing1 dd 01h byte_writing2 dd 02h .data? hInstance dd ? hFile dd ? .code start: invoke GetModuleHandle, NULL mov hInstance, eax invoke DialogBoxParam, hInstance, IDD_DLG, NULL, ADDR DlgProc, NULL invoke ExitProcess, eax DlgProc Proc hDlg :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD pusha .if uMsg == WM_INITDIALOG invoke LoadIcon, hInstance, 3001 invoke SendMessage, hDlg, WM_SETICON, 1, eax .elseif uMsg == WM_LBUTTONDOWN invoke SendMessage, hDlg, WM_NCLBUTTONDOWN, HTCAPTION, lParam .elseif uMsg == WM_COMMAND .if wParam == IDC_PATCH invoke SetFileAttributes, ADDR FileName, FILE_ATTRIBUTE_NORMAL invoke CopyFile, ADDR FileName, ADDR NewFileName, TRUE invoke CreateFile, ADDR FileName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL cmp eax, -1 je _notfound mov hFile, eax .while CarID != 264h mov eax, CarID mul mult add eax, 45BACBh invoke SetFilePointer, hFile, eax, NULL, FILE_BEGIN invoke WriteFile, hFile, OFFSET byte_replace1, 01h, OFFSET byte_writing1, NULL inc CarID .endw mov eax, 0DABC02h invoke SetFilePointer, hFile, eax, NULL, FILE_BEGIN invoke WriteFile, hFile, OFFSET byte_replace2, 02h, OFFSET byte_writing2, NULL invoke CloseHandle, hFile invoke MessageBox, NULL, ADDR MsgOK, ADDR CapOK, MB_ICONINFORMATION jmp _finish _notfound: invoke MessageBox, NULL, ADDR MsgNotFound, ADDR CapNotFound, MB_ICONERROR _finish: .elseif wParam == IDC_EXIT invoke EndDialog, hDlg, NULL .endif .elseif uMsg == WM_CLOSE invoke EndDialog, hDlg, NULL .endif popa xor eax, eax ret DlgProc EndP end start ; ----------------------[вырезать]------------------------------
даже не знаю, как такое сделать на автомате... вручную я запарюсь копировать параметры. Ты лучше скажи какие тебя интересуют.
Ладно, тогда не надо, я думал они у тебя в готовом виде есть.
2Seemann:
Можешь написать параметры функций (из первого поста) и значения кототрые они возвращают (хотя бы некоторых).
У меня 5300E0D7
Попробуй этим http://cracklab.ru/download.php?action=get&n=OTA=
-> Plugins -> CRC32