<
Последние сообщения:

→ В теме Ваши любимые песни, от RusUpdate
→ В теме СПАМ-мусорка, от potopa
→ В теме Интервью со Splinter'ом, от Дилан
→ В теме Adobe After Effects, от Дилан
→ В теме Ваш любимый актёр/актриса?, от Дилан
→ В теме Технические проблемы, от Дилан
Меню форума:

Правила
Новые сообщения
Поиск
Список пользователей
RSS
Чат
Это важно:

  • Страница 1 из 1
  • 1
Модератор форума: iGROK  
GTA форум » Наши модмейкеры » iGROK (AXLiberty) » [IV|EFLC|REL|SRC] MultiHandling (Delphi) (Скрипт, переключающий handling транспорта во время игры.)
[IV|EFLC|REL|SRC] MultiHandling (Delphi)
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.

 

GitHub: [C++] Helpers



Сообщение отредактировал iGROK - четверг, 26-03-2015, 16:08
Нет на форуме
 
романдариумчетверг, 26-03-2015, 22:33 | Сообщение #2

Группа:
Жители города
Серый кардинал

На счету:
851$
Регистрация:
01-08-2013
Город:
САРАТОВ
Пол:
Мужчина

Поздравляю, с "легализацией"! Наберись терпения, будут те, кто скажет тебе спасибо. band hands
Нет на форуме
 
GTA форум » Наши модмейкеры » iGROK (AXLiberty) » [IV|EFLC|REL|SRC] MultiHandling (Delphi) (Скрипт, переключающий handling транспорта во время игры.)
  • Страница 1 из 1
  • 1
Поиск:

СОЦИАЛЬНЫЕ СЕТИ:
© 2007-2023
«При копировании материалов с сайта, будьте людьми — ставьте ссылку»