iGROK | четверг, 26-03-2015, 15:13 | Сообщение #1 |
Группа: FIB
SPEEDHUNTER
На счету: 2573$
Регистрация: 08-10-2009
Город: Ростов-на-Дону
Пол: Мужчина
|
Предыдущие видео: MultiHandling by AXLiberty (v.1.3) MultiHandling by AXLiberty: Final test
Полную информацию о скрипте, и скачать сам скрипт можно --> здесь
Так как с момента релиза скрипта прошло довольно много времени, плюс в разработке находится абсолютно новая версия скрипта, с абсолютно новым алгоритмом - настало время выложить исходный код данной версии скрипта. Начинающим скриптерам, думаю, может пригодиться.
GTA-функция PrintStringWithLiteralStringNow, отображающая сообщения в игре, может выводить русские символы только в том случае, если они прописаны в коде скрипта в соответствующей кодировке. Для кодирования русского текста использовалась программа собственно написания, которая позже также будет опубликована на форуме.
Код {*******************************************************} { } { MultiHandling for GTA IV & EFLC } { Created By AXLiberty, GooD-NTS } { and Alexander Blade (C) 2013 } { } { Version 1.4.1 } { } {*******************************************************}
library MultiHandling;
uses Windows, SysUtils, Classes;
type GET_PLAYER_ID = function () : Integer; cdecl; GET_PLAYER_CHAR = procedure (playerID : Integer; var playerChar : Cardinal); cdecl; IS_CHAR_IN_ANY_CAR = function (Ped : Cardinal) : Boolean; cdecl; GET_CAR_CHAR_IS_USING = procedure (Ped : Cardinal; var Car : Cardinal); cdecl; GET_CAR_MODEL = procedure (Car : Cardinal; var Model : Cardinal); cdecl; PRINT_STRING_WITH_LITERAL_STRING_NOW = procedure (GXT_Entry, Text : PAnsiChar; Time, Symbol_count : Integer); cdecl;
function GetExeFileVersion( AFileName: String ): String; var dwSize, dwTemp: DWORD; abInfo: Array of byte; Pint: ^VS_FIXEDFILEINFO; begin dwSize:= GetFileVersionInfoSize(pchar(AFileName),dwTemp); if dwSize <> 0 then begin SetLength(abInfo,dwSize); GetFileVersionInfo(pchar(AFileName),0,dwSize,@abInfo[0]); if VerQueryValue(@abInfo[0],'\',Pointer(pint), dwTemp) then begin Result := IntToStr( HiWord(pint^.dwFileVersionMS) ); Result := Result + IntToStr( LoWord(pint^.dwFileVersionMS) ); Result := Result + IntToStr( HiWord(pint^.dwFileVersionLS) ); Result := Result + IntToStr( LoWord(pint^.dwFileVersionLS) ); end; end; end;
function KeyPressed(const Key : SmallInt) : Boolean; begin Result := Hi(GetKeyState(Key)) = $FF; end;
var readHandling : procedure(); stdcall; editHandling, ini : TStringList; playerID : integer; playerChar, car, model : Cardinal; GetPlayerID : GET_PLAYER_ID; GetPlayerChar : GET_PLAYER_CHAR; IsCharInAnyCar : IS_CHAR_IN_ANY_CAR; GetCarCharIsUsing : GET_CAR_CHAR_IS_USING; GetCarModel : GET_CAR_MODEL; PrintStringWithLiteralStringNow : PRINT_STRING_WITH_LITERAL_STRING_NOW; carName, Language, find_mlt, find_off : string; i : integer;
procedure MainLoop(); begin if LowerCase(ExtractFileName(GetModuleName(GetModuleHandleA(nil)))) = 'gtaiv.exe' then begin if GetExeFileVersion(GetModuleName(GetModuleHandleA(nil))) = '1070' then begin @GetPlayerID := Pointer($00B923C0 - $400000 + GetModuleHandleA(nil)); @GetPlayerChar := Pointer($00B943F0 - $400000 + GetModuleHandleA(nil)); @IsCharInAnyCar := Pointer($00B98670 - $400000 + GetModuleHandleA(nil)); @GetCarCharIsUsing := Pointer($00BA5090 - $400000 + GetModuleHandleA(nil)); @GetCarModel := Pointer($00B7ABA0 - $400000 + GetModuleHandleA(nil)); @PrintStringWithLiteralStringNow := Pointer($00BAFA20 - $400000 + GetModuleHandleA(nil)); @readHandling := Ptr($00971FC0 - $400000 + GetModuleHandleA(nil)); end else if GetExeFileVersion(GetModuleName(GetModuleHandleA(nil))) = '1061' then begin @GetPlayerID := Pointer($00B95950 - $400000 + GetModuleHandleA(nil)); @GetPlayerChar := Pointer($00B97940 - $400000 + GetModuleHandleA(nil)); @IsCharInAnyCar := Pointer($00B9BB60 - $400000 + GetModuleHandleA(nil)); @GetCarCharIsUsing := Pointer($00BA85F0 - $400000 + GetModuleHandleA(nil)); @GetCarModel := Pointer($00B7E0C0 - $400000 + GetModuleHandleA(nil)); @PrintStringWithLiteralStringNow := Pointer($00BB2F00 - $400000 + GetModuleHandleA(nil)); @readHandling := Ptr($009752A0 - $400000 + GetModuleHandleA(nil)); end else if GetExeFileVersion(GetModuleName(GetModuleHandleA(nil))) = '1040' then begin @GetPlayerID := Pointer($009F6110 - $400000 + GetModuleHandleA(nil)); @GetPlayerChar := Pointer($009F7ED0 - $400000 + GetModuleHandleA(nil)); @IsCharInAnyCar := Pointer($009FBB40 - $400000 + GetModuleHandleA(nil)); @GetCarCharIsUsing := Pointer($00A071A0 - $400000 + GetModuleHandleA(nil)); @GetCarModel := Pointer($009DF8C0 - $400000 + GetModuleHandleA(nil)); @PrintStringWithLiteralStringNow := Pointer($00A10FE0 - $400000 + GetModuleHandleA(nil)); @readHandling := Ptr($00BC2E50 - $400000 + GetModuleHandleA(nil)); end else if GetExeFileVersion(GetModuleName(GetModuleHandleA(nil))) = '1004' then begin @GetPlayerID := Pointer($00B26730 - $400000 + GetModuleHandleA(nil)); @GetPlayerChar := Pointer($00B28270 - $400000 + GetModuleHandleA(nil)); @IsCharInAnyCar := Pointer($00B2BF40 - $400000 + GetModuleHandleA(nil)); @GetCarCharIsUsing := Pointer($00B378E0 - $400000 + GetModuleHandleA(nil)); @GetCarModel := Pointer($00B0F840 - $400000 + GetModuleHandleA(nil)); @PrintStringWithLiteralStringNow := Pointer($00B41780 - $400000 + GetModuleHandleA(nil)); @readHandling := Ptr($00BC4D60 - $400000 + GetModuleHandleA(nil)); end else begin @GetPlayerID := nil; @GetPlayerChar := nil; @IsCharInAnyCar := nil; @GetCarCharIsUsing := nil; @GetCarModel := nil; @PrintStringWithLiteralStringNow := nil; @readHandling := nil; end end else if LowerCase(ExtractFileName(GetModuleName(GetModuleHandleA(nil)))) = 'eflc.exe' then begin @GetPlayerID := Pointer($00C00FD0 - $400000 + GetModuleHandleA(nil)); @GetPlayerChar := Pointer($00C02FE0 - $400000 + GetModuleHandleA(nil)); @IsCharInAnyCar := Pointer($00C07200 - $400000 + GetModuleHandleA(nil)); @GetCarCharIsUsing := Pointer($00C13CA0 - $400000 + GetModuleHandleA(nil)); @GetCarModel := Pointer($00BE9770 - $400000 + GetModuleHandleA(nil)); @PrintStringWithLiteralStringNow := Pointer($00C1E500 - $400000 + GetModuleHandleA(nil)); @readHandling := Ptr($008DC120 - $400000 + GetModuleHandleA(nil)); end else begin @GetPlayerID := nil; @GetPlayerChar := nil; @IsCharInAnyCar := nil; @GetCarCharIsUsing := nil; @GetCarModel := nil; @PrintStringWithLiteralStringNow := nil; @readHandling := nil; end; editHandling := TStringList.Create; ini := TStringList.Create; ini.LoadFromFile('./MultiHandling.ini'); Language := AnsiLowerCase(ini.Values['Language']); while True do begin Sleep(100); if AnsiLowerCase(ini.Values['Cyclic_INI_Reading'])='true' then begin ini.LoadFromFile('./MultiHandling.ini'); Language := AnsiLowerCase(ini.Values['Language']); end; if AnsiLowerCase(ini.Values['Cyclic_Handling_Reading'])='true' then begin try if @readHandling <> nil then begin readHandling(); if AnsiLowerCase(ini.Values['Beep'])='true' then if (pos(find_mlt,editHandling.Text)<>0) or (pos(find_off,editHandling.Text)<>0) then Beep(); if AnsiLowerCase(ini.Values['CHR_Message'])='true' then if Language='eng' then PrintStringWithLiteralStringNow('string', 'Developer mode', 5000, 1) else if Language='rus' then PrintStringWithLiteralStringNow('string', 'ћіґ¶є ѕ®µѕ®ЇјАЕ¶ё®', 5000, 1); end; except end; Sleep(2000); end; if KeyPressed(VK_F8) then begin playerID := GetPlayerID; GetPlayerChar(playerID, playerChar); IsCharInAnyCar(playerChar); GetCarCharIsUsing(playerChar, car); GetCarModel(car, model); case model of //GTA IV 1264341792 : carName:='ADMIRAL'; 1560980623 : carName:='AIRTUG'; 1171614426 : carName:='AMBULANCE'; 3253274834 : carName:='BANSHEE'; 2053223216 : carName:='BENSON'; 850991848 : carName:='BIFF'; 3950024287 : carName:='BLISTA'; 1075851868 : carName:='BOBCAT'; 2307837162 : carName:='BOXVILLE'; 3612755468 : carName:='BUCCANEER'; 2948279460 : carName:='BURRITO'; 3387490166 : carName:='BURRITO2'; 3581397346 : carName:='BUS'; 1884962369 : carName:='CABBY'; 534106620 : carName:='CAVCADE'; 4227685218 : carName:='CHAVOS'; 2162167887 : carName:='COGNOS'; 1063483177 : carName:='COMET'; 683047626 : carName:='CONTENDER'; 108773431 : carName:='COQUETTE'; 162883121 : carName:='DF8'; 1611340476 : carName:='DILETT'; 723973206 : carName:='DUKES'; 3609690755 : carName:='EMPEROR'; 2411965148 : carName:='EMPEROR2'; 754355876 : carName:='ESPERANT'; 2175389151 : carName:='FACTION'; 1127131465 : carName:='FBI'; 3197138417 : carName:='FELTZER'; 974744810 : carName:='FEROCI'; 1938952078 : carName:='FIRETRUK'; 1353720154 : carName:='FLATBED'; 627033353 : carName:='FORTUNE'; 1491375716 : carName:='FORKLIFT'; 2016857647 : carName:='FUTO'; 675415136 : carName:='FXT'; 884422927 : carName:='HABANERO'; 3953074643 : carName:='HAKUMAI'; 486987393 : carName:='HUNTLEY'; 418536135 : carName:='INFERNUS'; 3005245074 : carName:='INGOT'; 886934177 : carName:='INTRUDER'; 3646862555 : carName:='LANSTALK'; 4257937240 : carName:='LOKUS'; 2170765704 : carName:='MANANA'; 1304597482 : carName:='MARBELLA'; 3034085758 : carName:='MERIT'; 3984502180 : carName:='MINIVAN'; 525509695 : carName:='MOONBEAM'; 583100975 : carName:='MRTASTY'; 904750859 : carName:='MULE'; 148777611 : carName:='NOOSE'; 1348744438 : carName:='ORACLE'; 569305213 : carName:='PACKER'; 3486509883 : carName:='PATRIOT'; 2217223699 : carName:='PERENNIAL'; 1830407356 : carName:='PEYOTE'; 2157618379 : carName:='PHANTOM'; 131140572 : carName:='PINNACLE'; 1376298265 : carName:='PMP600'; 2046537925 : carName:='POLICE'; 2667966721 : carName:='POLICE2'; 2766887090 : carName:='POLPAT'; 4175309224 : carName:='PONY'; 2411098011 : carName:='PREMIER'; 2332896166 : carName:='PRES'; 3144368207 : carName:='PRIMO'; 1390084576 : carName:='RANCHER'; 83136452 : carName:='REBLA'; 3448987385 : carName:='RIPLEY'; 1350941015 : carName:='ROMAN'; 627094268 : carName:='ROMERO'; 4067225593 : carName:='RUINER'; 3845944409 : carName:='SABRE'; 1264386590 : carName:='SABRE2'; 2609945748 : carName:='SABREGT'; 3972623423 : carName:='SCHAFTER'; 1349725314 : carName:='SENTINEL'; 1344573448 : carName:='SOLAIR'; 3484649228 : carName:='SPEEDO'; 2795967114 : carName:='STALLION'; 1677715180 : carName:='STEED'; 1747439474 : carName:='STOCKADE'; 1723137093 : carName:='STRATUM'; 2333339779 : carName:='STRETCH'; 970598228 : carName:='SULTAN'; 3999278268 : carName:='SULTANRS'; 1821991593 : carName:='SUPERGT'; 3338918751 : carName:='TAXI'; 1208856469 : carName:='TAXI2'; 1917016601 : carName:='TRASH'; 2398307655 : carName:='TURISMO'; 1534326199 : carName:='URANUS'; 3469130167 : carName:='VIGERO'; 2536587772 : carName:='VIGERO2'; 3711685889 : carName:='VINCENT'; 3796912450 : carName:='VIRGO'; 2006667053 : carName:='VOODOO'; 1777363799 : carName:='WASHINGTON'; 1937616578 : carName:='WILLARD'; 3195007082 : carName:='YANKEE'; //TLAD 2549763894 : carName:='GBURRITO'; 207497487 : carName:='PACKER2'; 2287941233 : carName:='PBUS'; 4280472072 : carName:='REGINA'; 841808271 : carName:='RHAPSODY'; 2971866336 : carName:='TOWTRUCK'; 2396846736 : carName:='YANKEE2'; //TBOGT 562680400 : carName:='APC'; 4011757448 : carName:='AVAN'; 3990165190 : carName:='BUFFALO'; 2598821281 : carName:='BULLET'; 1147287684 : carName:='CADDY'; 3505073125 : carName:='CAVALCADE2'; 3703357000 : carName:='F620'; 4180339789 : carName:='LIMO2'; 1912215274 : carName:='POLICE3'; 2321795001 : carName:='POLICE4'; 908697398 : carName:='POLICEW'; 3039514899 : carName:='SCHAFTER2'; 2809443750 : carName:='SCHAFTER3'; 1337041428 : carName:='SERRANO'; 1051281622 : carName:='SERRANO2'; 1123216662 : carName:='SUPERD'; 1638119866 : carName:='SUPERD2'; //TLAD & TBOGT 729783779 : carName:='SLAMVAN'; 972671128 : carName:='TAMPA'; //Own else begin if pos(IntToStr(model),ini.Text)<>0 then carName := ini.Values[IntToStr(model)] else carName:='*nothing*'; end; end; find_off := carName + '_OFF'; find_mlt := carName + '_MLT'; editHandling.LoadFromFile('./common/data/handling.dat'); for i := 0 to editHandling.Count - 1 do begin if pos(find_mlt, editHandling.Strings[i])<>0 then begin editHandling.Strings[i-1] := StringReplace(editHandling.Strings[i-1], carName, find_off, []); editHandling.Strings[i] := StringReplace(editHandling.Strings[i], find_mlt, carName, []); readHandling(); if AnsiLowerCase(ini.Values['Beep'])='true' then if (pos(find_mlt,editHandling.Text)<>0) or (pos(find_off,editHandling.Text)<>0) then Beep(); if AnsiLowerCase(ini.Values['MLT_Message'])='true' then if (pos(find_mlt,editHandling.Text)<>0) or (pos(find_off,editHandling.Text)<>0) then if Language='eng' then PrintStringWithLiteralStringNow('string', 'Handling is switched', 5000, 1) else if Language='rus' then PrintStringWithLiteralStringNow('string', 'Handling Ѕіѕіё№МЕі»', 5000, 1); Break; end else if pos(find_off, editHandling.Strings[i])<>0 then begin editHandling.Strings[i+1] := StringReplace(editHandling.Strings[i+1], carName, find_mlt, []); editHandling.Strings[i] := StringReplace(editHandling.Strings[i], find_off, carName, []); readHandling(); if AnsiLowerCase(ini.Values['Beep'])='true' then if (pos(find_mlt,editHandling.Text)<>0) or (pos(find_off,editHandling.Text)<>0) then Beep(); if AnsiLowerCase(ini.Values['MLT_Message'])='true' then if (pos(find_mlt,editHandling.Text)<>0) or (pos(find_off,editHandling.Text)<>0) then if Language='eng' then PrintStringWithLiteralStringNow('string', 'Handling is switched', 5000, 1) else if Language='rus' then PrintStringWithLiteralStringNow('string', 'Handling Ѕіѕіё№МЕі»', 5000, 1); Break; end end; if pos('*nothing*', carName) <> 0 then begin if (Language='eng') or (Language='ENG') or (Language='Eng') then PrintStringWithLiteralStringNow('string', 'This vehicle is not supported in MultiHandling (MultiHandling.ini)', 5000, 1) else if (Language='rus') or (Language='RUS') or (Language='Rus') then PrintStringWithLiteralStringNow('string', '’®»»Й· Аѕ®»їЅјѕА »і ЅјІІіѕґ¶°®іАїН ° MultiHandling (MultiHandling.ini)', 5000, 1); end else if (pos(find_mlt, editHandling.Text) = 0) and (pos(find_off, editHandling.Text) = 0) then if Language='eng' then PrintStringWithLiteralStringNow('string', 'This vehicle is not configured for MultiHandling (handling.dat)', 5000, 1) else if Language='rus' then PrintStringWithLiteralStringNow('string', '’®»»Й· Аѕ®»їЅјѕА »і »®їАѕјі» ЅјІ MultiHandling (handling.dat)', 5000, 1); editHandling.SaveToFile('./common/data/handling.dat'); Sleep(2000); end; end; end;
var idThread : Cardinal;
begin CreateThread(nil, 0, @MainLoop, nil, 0, idThread); end.
Сообщение отредактировал iGROK - четверг, 26-03-2015, 16:08 |
Нет на форуме |
| |
романдариум | четверг, 26-03-2015, 22:33 | Сообщение #2 |
Группа: Жители города
Серый кардинал
На счету: 851$
Регистрация: 01-08-2013
Город: САРАТОВ
Пол: Мужчина
| Поздравляю, с "легализацией"! Наберись терпения, будут те, кто скажет тебе спасибо.
|
Нет на форуме |
| |