Куда поместить файлы samp ini

Обновлено: 21.11.2024

Легко загружайте тщательно отобранные списки модов, наша функция «Коллекции» перешла в режим открытого альфа-тестирования. Посетите нашу вики, чтобы начать.

  • Все игры
  • Grand Theft Auto: Трилогия
  • Моды
  • Визуальные эффекты
  • Это Unreal Trilogy Reshading: настройки RayTracing Ini включены вместе с необязательными оптимизированными файлами ini

Информация о файле

Последнее обновление

Исходная загрузка

Создатель

Загружено

Сканирование на вирусы

Теги для этого мода

  • Освещение
  • Изменить оттенок
  • настройка ini
  • Качество жизни
  • 20 лет моддинга – 2021 
  • ГТА: Сан-Андреас
  • ГТА 3
  • GTA: Вайс-Сити

Об этом моде

От этого культового зеленого оттенка и угрюмого ощущения Gta 3, если бы он не был слишком насыщенным, до более спокойных цветов Сан-Андреаса и до просмотра каждой мельчайшей детали в текстурах, которые вы никогда бы не заметили, этот мод для вас.

Внешние требования

Имя мода Примечания
Junior_Djjr Rain Fix Настоятельно рекомендуется
Восстановление Razed Fog Настоятельно рекомендуется

Кредиты и разрешение на распространение

  • Другие ресурсы пользователя Все ресурсы в этом файле принадлежат автору или взяты из бесплатных ресурсов моддеров
  • Разрешение на загрузку. Вы не можете загружать этот файл на другие сайты ни при каких обстоятельствах.
  • Разрешение на изменение Вам разрешено изменять мои файлы и выпускать исправления ошибок или улучшать функции, если вы указываете меня как оригинального создателя.
  • Разрешение на преобразование. Вам не разрешено преобразовывать этот файл для работы в других играх ни при каких обстоятельствах.
  • Разрешение на использование объекта Вы должны получить от меня разрешение, прежде чем вам будет разрешено использовать любой из ресурсов в этом файле
  • Разрешение на использование активов в продаваемых модах/файлах. Вам не разрешено использовать активы из этого файла в каких-либо модах/файлах, которые продаются за деньги в Steam Workshop или на других платформах
  • Разрешение на использование активов в модах/файлах, которые зарабатывают очки пожертвований. Вам не разрешено зарабатывать очки пожертвования для ваших модов, если они используют мои активы

Примечания автора

Этот автор не предоставил никаких дополнительных примечаний относительно прав доступа к файлам

Источники файлов

Этот автор не указал никого другого в этом файле

Система баллов пожертвований

Этот мод не позволяет получать очки пожертвований

Если так или иначе, если ваша игра выглядит не так хорошо, как показано в видео, я изменил различные настройки, такие как расстояние прорисовки в ini-файлах. Так что имейте это в виду, насколько сообщество обнаружило, что оно исчерпано вещи, которые нужно включить, я включил некоторые настройки, они не отображались. Например, трассировка лучей в меню теперь с выпуском 1.1. Я включаю файл двигателя для san andreas и не стал менять другие, поскольку они не работают все сразу с тем, что имело смысл, у него есть еще больше настроек, связанных с увеличенным расстоянием освещения и картами нормалей для вещей, которых у него не было
Мой фокус был не столько на тумане, а не на наложении, имитирующем его, Razed Fog Restoration Highly Рекомендуемые. Dof делает довольно хорошую работу, немного заботясь об этом. Dof For Gta 3 Был добавлен с тех пор, как я не включил его в 1.0, потому что я не мог сделать это правильно, так как он был слишком близко, если это вообще вас раздражает, это очень просто вы можете отключить его в интерфейсе Reshade, эффект cinematic_dof

Представляю вам официальное руководство по защите от дурака

[Шаг первый] Загрузите последнюю версию Reshade. Выберите пресет и поместите в Definitive Edition/GameFace/Binaries

Контрастность должна быть установлена ​​на ноль
С максимальной яркостью

[Новичок в Reshade?] Если вы новичок в Reshade, значит, он не будет просто загружаться автоматически После запуска Потяните интерфейс с помощью кнопки «Домой» и нажмите клавиши со стрелками в углу. Затем он изменит ненастроенный ini. с изменением оттенка. К тому, что вы добавили. Затем выберите режим «Производительность» в нижнем углу

[Необязательная часть] С помощью CustomSettings и Gameusersettings вы можете заменить все 3 игры. Например, вот расположение Documents/Rockstar Games/GTA San Andreas окончательное издание/config/windowsnoeditor. Файл движка поместите в C:\Users\ Ваше имя пользователя\AppData\Local\Rockstar Games\GTA San Andreas Definitive Edition\Saved\Config\WindowsNoEditor


Это руководство посвящено чтению файлов INI. В основном это используется для чтения текстов сообщений (чтобы обеспечить многоязычность сценариев), игровых настроек, а также свойств пользователя.

Содержание

Формат файла INI

Чтобы читать из INI-файлов, нам сначала нужно понять его формат. К счастью, он прост для понимания и удобочитаем.

Файл INI структурирован по разделам. Каждый раздел должен начинаться с написания его названия в квадратных скобках. Затем внутри этих разделов элементы INI используются для хранения самих данных. Давайте посмотрим, как это выглядит:

Мы также будем использовать этот фрагмент для нашего тестового сценария, поэтому сохраните его как "example.ini" в каталоге scriptfiles.

Функция чтения из INI-файлов

Подход

Чтобы мы поняли (надеюсь) формат файла, нам нужно выбрать способ чтения из INI-файла. Нам нужно написать функцию, которой нужны некоторые входные параметры, а именно: имя файла, раздел и элемент. Они однозначно определят, какой элемент нужно получить из файла.

Сначала мы должны просмотреть файл, пока не найдем нужный раздел. Это легко сделать, сравнив каждую прочитанную строку с «[WANTED_SECTION_NAME]». Когда он будет найден, мы переключимся на itemmode. В этом режиме мы будем сравнивать начало каждой строки, если нашли правильный элемент. Если это произошло, мы вернем текст за символом равенства =.

Когда мы находимся в режиме предмета и попадаем в другой раздел, мы немедленно останавливаемся, потому что нужный предмет не был найден в нужном разделе.

Итак, давайте напишем код:

Ну, на самом деле кода было много. :-) Большинство из них должны быть понятными или должны быть хорошо описаны в комментариях. Но есть одна часть, которую, вероятно, следует объяснить лучше; а именно часть, где копируется фактический текст элемента. Давайте посмотрим на это:

Итак, сначала мы просто сравниваем строку чтения с требуемой itemstr, в этом нет ничего особенного. Но в следующей строке мы форматируем параметр результата с помощью строки [strlen (itemsstr)]. Ху? Не будет ли строка[strlen(itemstr)] только одним символом? Нет!

PAWN имеет базовые функции нарезки строк. Это означает, что вы можете определить начальную точку над компонентом индекса массива. Пример:

Это напечатает "там!".

Использование

Чтобы сделать это полным, краткое описание использования getINIString.

getINIString(имя файла[], раздел[], элемент[], результат[] )

  • имя_файла[]: имя файла для чтения.
  • section[]: раздел, в котором находится элемент.
  • item[]: имя элемента, из которого мы хотим извлечь текст.
  • result[]: строка, в которой будет содержаться результирующий текст элемента. Должно быть достаточно большим!
  • Возвращаемое значение: 1 при обнаружении, иначе 0.

Улучшение: значение по умолчанию

Что делать, если вы пытаетесь получить значение из INI-файла, но его не существует? В этом случае getINIString() возвращает 0, поэтому мы можем отреагировать на этот случай. Одной из идей может быть предоставление значения по умолчанию, которое используется, когда элемент не может быть найден в файле INI. Это довольно просто, мы просто добавим в наш учебник следующую функцию:

В getINIStringDefault() добавлен один параметр: defval[]. Здесь содержится значение по умолчанию, которое будет скопировано в result[], если требуемый элемент не может быть найден в INI-файле.

Использование

getINIStringDefault(имя файла[], раздел[], элемент[], defval[], результат[] )

  • имя_файла[]: имя файла для чтения.
  • section[]: раздел, в котором находится элемент.
  • item[]: имя элемента, из которого мы хотим извлечь текст.
  • defval[]: строка, которая будет скопирована в result[], если item[] не будет найден в INI.
  • result[]: строка, в которой будет содержаться результирующий текст элемента. Должно быть достаточно большим!
  • Возвращаемое значение: 1 при обнаружении, иначе 0.

Примеры использования наших новых функций

Вот несколько примеров использования наших новых функций INI.

В этих примерах будут отображаться настраиваемые сообщения о соединении и разделении. Вы можете редактировать их в scriptfiles/example.ini «на лету» без необходимости перезапуска/перезагрузки сервера.

Заключение

(2021-02-12, 20:57) Radical Написал: Сохранить членов банды в файл.
Затем загрузите их все имена через fread и установите их уровень.

Если вы не понимаете, см. это:

новый файл: handle = fopen("gang_members.txt", io_read), строка[28], ник[24], INI: файл;

if(handle)
while(fread(handle, nick)) format(string, 28, "Users/%s.ini", nick);
файл = INI_Open(строка);
INI_WriteInt(файл, "p_level", 100);
INI_Close(файл);
>
fclose(handle);
> else print("Файл \"gang_members.txt\" не существует или не может быть открыт.");
>

// Примечание: имена участников, которые вы сохранили в файле 'gang_members.txt', должны быть именами каждого в новой строке


Думаю, мне стоило немного рассказать о банде. эта банда состоит из простых команд, таких как "/gangmembers" или "/setganglevel". то, что вы делаете, на самом деле близко, но мне нужен пример, который связан с загрузкой каждой учетной записи из папки scriptfiles. я мог бы подробнее рассказать о файлах сценариев, если вы не понимаете.

(2021-02-12, 22:04) mems Написал: наверное, мне стоило немного поподробнее рассказать о банде. эта банда состоит из простых команд, таких как "/gangmembers" или "/setganglevel". то, что вы делаете, на самом деле близко, но мне нужен пример, который связан с загрузкой каждой учетной записи из папки scriptfiles. я мог бы подробнее рассказать о файлах сценариев, если вы не понимаете.

Для этого нам нужна функция readdir() (чтение каталога), которой нет в библиотеке SA-MP.

Но у меня все еще есть способ сделать это. смотри:

При регистрации нового игрока добавьте его имя в файл allusers.txt.

новый файл: handle = fopen("allusers.txt", io_write), Name[28];
GetPlayerName(playerid, Name, 24);
format(Имя, 28, "%s\r\n", Имя);
fwrite(дескриптор, имя);
fclose(дескриптор);


Теперь с предыдущим кодом, который я дал, вы можете загрузить данные всех игроков, или вы можете установить или дать всем игрокам уровень или что-то в этом роде.

новый файл: handle = fopen("allusers.txt", io_read), ник[24];

if(дескриптор)
while(fread(дескриптор, ник)) // вещи .
>
fclose(handle);
> else print("Файл \"allusers.txt\" не существует или не может быть открыт.");
>

(2021-02-12, 22:04) mems Написал: наверное, мне стоило немного поподробнее рассказать о банде. эта банда состоит из простых команд, таких как "/gangmembers" или "/setganglevel". то, что вы делаете, на самом деле близко, но мне нужен пример, который связан с загрузкой каждой учетной записи из папки scriptfiles. я мог бы подробнее рассказать о файлах сценариев, если вы не понимаете.

Для этого нам нужна функция readdir() (чтение каталога), которой нет в библиотеке SA-MP.

Но у меня все еще есть способ сделать это. смотри:

При регистрации нового игрока добавьте его имя в файл allusers.txt.

новый файл: handle = fopen("allusers.txt", io_write), Name[28];
GetPlayerName(playerid, Name, 24);
format(Имя, 28, "%s\r\n", Имя);
fwrite(дескриптор, имя);
fclose(дескриптор);


Теперь с предыдущим кодом, который я дал, вы можете загрузить данные всех игроков, или вы можете установить или дать всем игрокам уровень или что-то в этом роде.

новый файл: handle = fopen("allusers.txt", io_read), ник[24];

if(дескриптор)
while(fread(дескриптор, ник)) // вещи .
>
fclose(handle);
> else print("Файл \"allusers.txt\" не существует или не может быть открыт.");
>

извините за такой поздний ответ. есть ли способ прочитать файл каждого пользователя? если да, то не могли бы вы привести примеры?

редактировать: я попробовал, и мой сервер не загружается. вот ошибка:

[jit] Компиляция отключена
Скрипт[gamemodes/fps.amx]: Ошибка выполнения 19: "Файл или функция не найдены"
Количество моделей техники: 173

while(dir_list(dHandle, item, type))
if(type == FM_FILE) printf("%s является файлом", item);
else if(type == FM_DIR) printf("%s является каталогом", item);
>

Обычно вам не нужно включать «params[]», если вы его не используете, например: CMD:test(playerid) . Таким образом, вам не нужно использовать неиспользуемую прагму.
Ошибка выполнения 19 означает, что файл или функция не найдены (как это точно сказано), то есть плагин не был загружен должным образом. Вы действительно загрузили плагин? Возможно, вам не хватает некоторого (32-битного) пакета vcredist.
Раньше у меня были установлены (в таком порядке): 2010, 2010-SP1, 2012-U4, 2015

Как видите, при обходе каталога с помощью этого кода вы можете использовать переменную "type", чтобы проверить, является ли файл каталогом или файлом.
Если ваши пользовательские файлы находятся в папке "scriptfiles/users", вам придется открыть этот каталог. Тогда каждый файл будет пользовательским (при условии, что в нем нет других файлов).

Вот сценарий, который я написал некоторое время назад для некоторого сервера, чтобы преобразовать текстовые файлы журнала изменений в базу данных во время инициализации:

hook OnGameModeInit()
new dir:changelog_dir = dir_open("scriptfiles/changelog");
новый файл_списка[15], тип_списка;

в то время как (dir_list(changelog_dir, list_file, list_type))
if (list_type == FM_DIR) continue;
новая находка;
if ((find = strfind(list_file, ".txt")) == -1) continue;
strdel(list_file, find, find + 4);
новый кэш:res_upper = mysql_query(dbHandle, sprintf("ВЫБЕРИТЕ версию ИЗ журнала изменений, ГДЕ версия = '%s';", list_file));
if (!cache_num_rows())
printf("[ ] Найден новый журнал изменений %s", list_file);
cache_delete(res_upper);
новый кэш:res = mysql_query(dbHandle, sprintf("ВСТАВИТЬ В журнал изменений (версия) ЗНАЧЕНИЯ ('%s');", list_file));
новый new_cl_id = cache_insert_id();
cache_delete(res);
новый файл:cl_file = fopen(sprintf("changelog/%s.txt", list_file), io_read);
if (cl_file)
новый cl_entry[130], cl_lines, i;

пока (fread(cl_file, cl_entry)) cl_lines++;
fseek(cl_file, _, seek_start);

пока (fread(cl_file, cl_entry))
новый cl_query[190];
я++;
if (i < cl_lines) strdel(cl_entry, strlen(cl_entry) - 1, strlen(cl_entry));
mysql_format(dbHandle, cl_query, sizeof(cl_query), "INSERT INTO changelog_entries (clid, entry ) ЗНАЧЕНИЯ (%i, '%e');", new_cl_id, cl_entry);
mysql_query(dbHandle, cl_query, false);
>
printf("[OK] Список изменений для %s добавлен в базу данных", list_file);
fclose(cl_file);
>
>
else cache_delete(res_upper);
>
dir_close(changelog_dir);
вернуть Y_HOOKS_CONTINUE_RETURN_1;
>

Как видите, он сканирует каталог scriptfiles/changelog и открывает файлы только в том случае, если они на самом деле являются файлами (а не каталогами) и когда конец имени файла - ".txt".
Вы можете сделать что-то подобное (например, если ваши пользовательские файлы используют расширение .ini, вы можете открыть только пользовательские файлы).

Кроме того, я настоятельно рекомендую использовать MySQL, особенно если сервер SAMP работает в Windows. Если пользовательских файлов много, ожидайте огромных задержек, если вы открываете каждый пользовательский файл во время выполнения.
Имейте в виду, что SAMP является однопоточным, поэтому, если вы запускаете код, который перебирает все пользовательские файлы, скрипт ничего не делает, что приводит к лагам для всех. OnPlayerUpdate() не обрабатывается, чат не обновляется и ничего не делает, пока ваш код не будет выполнен.

(2021-02-14, 09:12 AM) Кварде написал: Обычно вам не нужно включать «params[]», если вы его не используете, поэтому: CMD:test(playerid) . Таким образом, вам не нужно использовать неиспользуемую прагму.
Ошибка выполнения 19 означает, что файл или функция не найдены (как это точно сказано), то есть плагин не был загружен должным образом. Вы действительно загрузили плагин? Возможно, вам не хватает некоторого (32-битного) пакета vcredist.
Раньше они были установлены (в таком порядке): 2010, 2010-SP1, 2012-U4, 2015

Как видите, при обходе каталога с помощью этого кода вы можете использовать переменную "type", чтобы проверить, является ли файл каталогом или файлом.
Если ваши пользовательские файлы находятся в папке "scriptfiles/users", вам придется открыть этот каталог. Тогда каждый файл будет пользовательским (при условии, что в нем нет других файлов).

Вот сценарий, который я написал некоторое время назад для некоторого сервера, чтобы преобразовать текстовые файлы журнала изменений в базу данных во время инициализации:

hook OnGameModeInit()
new dir:changelog_dir = dir_open("scriptfiles/changelog");
новый файл_списка[15], тип_списка;

в то время как (dir_list(changelog_dir, list_file, list_type))
if (list_type == FM_DIR) continue;
новая находка;
if ((find = strfind(list_file, ".txt")) == -1) continue;
strdel(list_file, find, find + 4);
новый кэш:res_upper = mysql_query(dbHandle, sprintf("ВЫБЕРИТЕ версию ИЗ журнала изменений, ГДЕ версия = '%s';", list_file));
if (!cache_num_rows())
printf("[ ] Найден новый журнал изменений %s", list_file);
cache_delete(res_upper);
новый кэш:res = mysql_query(dbHandle, sprintf("ВСТАВИТЬ В журнал изменений (версия) ЗНАЧЕНИЯ ('%s');", list_file));
новый new_cl_id = cache_insert_id();
cache_delete(res);
новый файл:cl_file = fopen(sprintf("changelog/%s.txt", list_file), io_read);
if (cl_file)
новый cl_entry[130], cl_lines, i;

пока (fread(cl_file, cl_entry)) cl_lines++;
fseek(cl_file, _, seek_start);

пока (fread(cl_file, cl_entry))
новый cl_query[190];
я++;
if (i < cl_lines) strdel(cl_entry, strlen(cl_entry) - 1, strlen(cl_entry));
mysql_format(dbHandle, cl_query, sizeof(cl_query), "INSERT INTO changelog_entries (clid, entry ) ЗНАЧЕНИЯ (%i, '%e');", new_cl_id, cl_entry);
mysql_query(dbHandle, cl_query, false);
>
printf("[OK] Список изменений для %s добавлен в базу данных", list_file);
fclose(cl_file);
>
>
else cache_delete(res_upper);
>
dir_close(changelog_dir);
вернуть Y_HOOKS_CONTINUE_RETURN_1;
>

Как видите, он сканирует каталог scriptfiles/changelog и открывает файлы только в том случае, если они на самом деле являются файлами (а не каталогами) и когда конец имени файла - ".txt".
Вы можете сделать что-то подобное (например, если ваши пользовательские файлы используют расширение .ini, вы можете открыть только пользовательские файлы).

Кроме того, я настоятельно рекомендую использовать MySQL, особенно если сервер SAMP работает в Windows. Если пользовательских файлов много, ожидайте огромных задержек, если вы открываете каждый пользовательский файл во время выполнения.
Имейте в виду, что SAMP является однопоточным, поэтому, если вы запускаете код, который перебирает все пользовательские файлы, скрипт ничего не делает, что приводит к лагам для всех. OnPlayerUpdate() не обрабатывается, чат не обновляется и ничего не делает, пока ваш код не будет выполнен.

видя, что этот код немного сложно переварить, поэтому я решил пойти по пути Radical, поскольку он использует материал mysql, поэтому мои шансы на его работу автоматически низки.

Я пользовался его способом и пока он выкладывает имя, но оно почему-то заменяет имя игрока, который впервые зарегистрировался, на того, кто только что зарегистрировался. можно ли заставить его перечислить все имена, используя \n или что-то в этом роде?

и когда дело доходит до выполнения таких команд:

CMD:test(playerid, params[])
новый файл: handle = fopen("allusers.txt", io_read), ник[24],INI: файл;
новая строка[32], gsflevel;
if((IsPlayerAdmin(playerid)) || PlayerInfo[playerid][AdminLevel] == 3) if(sscanf(params, "i", gsflevel)) return SendClientMessage(playerid, COLOR_RED, "Синтаксис: /setallgsf ");
if(gsflevel > 13) return SendClientMessage(playerid, COLOR_RED, "ОШИБКА: максимальный уровень GSF равен 13");
if(gsflevel < 0) return SendClientMessage(playerid, COLOR_RED, "ОШИБКА: нельзя установить меньше 0");
if(дескриптор)
while(fread(дескриптор, ник)) < br /> format(string, 28, "scriptfiles/Users/%s.ini", ник);
файл = INI_Open(строка);
INI_SetTag(file, "=|PlayerData| GSFLevel", gsflevel);
INI_Close(файл);
>
fclose(handle);
> else print("Файл \"allusers.txt\" не существует или не может быть открыт.");
>
возврат 1;
> else return SendClientMessage(playerid, COLOR_RED, "ОШИБКА: Авторизация отозвана.");
>

код такой же, как у Radical, но все равно его не опубликую:

новый файл: handle = fopen("allusers.txt", io_write), Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, sizeof(Name));
format(Name, sizeof(Name), "%s\r\n", Name);
fwrite(дескриптор, имя);
fclose(дескриптор);


Что это?
Простой учебник о том, как создать систему входа и регистрации с помощью Y_INI.

Что такое Y_INI?
Y_INI — это обширная программа для чтения и записи файлов на основе .INI, также известная как «система управления файлами», созданная Y_Less. Это включено в библиотеку/каталог YSI вместе с другими полезными включениями, такими как y_commands (YCMD) и y_groups.


Шаг I
Добавьте Y_INI Include в начало скрипта.

Это включает все необходимые функции, необходимые для создания нашей системы входа и регистрации.


Шаг II
Давайте определим несколько диалогов.

Шаг III
Определение «ПУТИ» файла .INI.

Шаг 4.
Добавим несколько цветов.

Шаг V.
Мы собираемся использовать перечисление для хранения наших переменных.

Шаг VI
Теперь мы создадим функцию для загрузки данных пользователя.

Шаг VII.
Давайте создадим простую фондовую функцию.

Стандартная функция «UserPath» просто собирается «захватить» «ПУТЬ» к файлу пользователя.


Шаг VIII.
Добавьте этот код под своей предыдущей функцией акции.

Вышеприведенная акция представляет собой простой «хэшер», который будет использоваться для хеширования паролей. Спасибо Dracoblue.

Шаг IX.
Теперь мы воспользуемся обратным вызовом OnPlayerConnect, чтобы проверить, зарегистрирован ли игрок.

Мы будем использовать встроенную функцию fexist для поиска нашего файла. Параметры установлены для нашей стандартной функции, которую мы создали. Если файл существует, вы получите диалоговое окно «Вход». Если это не так, вы получите диалоговое окно регистрации.

Вместо того, чтобы использовать оператор if для определения моих диалогов, я использовал варианты, поскольку они занимают меньше места и предположительно «быстрее». (!response) — это функция, которая, если первая кнопка не была нажата, выгоняет игрока.

if(!strlen(inputtext)) объясняет, что если в диалоговом окне (вводе) ничего не было введено, вам будет предложено открыть другое диалоговое окно, в котором отображается сообщение "Неверный пароль".

Если все идет хорошо, функция INI_Open затем «выполняется», которая загружает и открывает файл пользователя. После открытия вызывается функция INI_WriteInt, которая начинает запись данных в пользовательский файл. udb_hash будет генерировать хеш-код из введенного игроком текста (того, что вы набрали). И после того, как все это будет завершено, он будет закрыт функцией 'INI_Close'.

После завершения вам будет предложено открыть диалоговое окно «Вход в систему».

Если в DIALOG_LOGIN ответ будет ложным (вы нажали "ВЫХОД"), вы будете исключены. Если предоставлена ​​правильная информация (предоставлен пароль), функция INI_Parsefile просканирует и загрузит данные вашего игрока.


Шаг XI
Не забывайте, вам понадобится способ сохранить эти переменные. Обратный вызов OnPlayerDisconnect просто повторно открывает файлы, записывает любые значения, которые были сохранены, а затем закрывает их.

Шаг XII.
Наконец, добавьте это в OnPlayerDeath, чтобы повысить ценность убийств и смертей.

За неимением лучшей идеи я назвал эту штуку SAMP File Launcher (или SAMP_FL). В прошлом я создавал подобные сценарии с помощью AutoHotkey и нахожу его весьма полезным.

Идея в том, что мне обычно нравится играть на разных серверах и использовать разные имена персонажей (например, Дуглас Джеки и Дэвид Спир). У каждого персонажа есть своя уникальная сюжетная линия, задания, пути и т. д., и каждому потребуются разные наборы горячих клавиш для управления различными командами.

Этот скрипт работает в фоновом режиме и практически не потребляет энергии, и как только ваш процесс gta_sa.exe запустится, он начнет читать ваш журнал чата. Как только он увидит, какой сервер и персонаж/имя пользователя вы используете, он запустит соответствующий файл (даже если это не файл .ahk или .exe).

Поскольку мне нравится упорядочивать свои файлы и сценарии особым образом, это действительно помогает не просматривать обширные папки и подпапки в поисках нужного файла перед запуском игры. Он просто выполняет все за меня.

В нем также есть несколько полезных подсказок, которые уведомляют вас о запуске скрипта.

  • Имя хоста
  • Имя персонажа
  • Файл для выполнения

Именем персонажа будет ваше имя пользователя, которое отображается в вашем журнале чата. Например:

В этом случае вам нужно установить имя персонажа на Douglas_Jackie (включая подчеркивание, но, возможно, не имя моего персонажа)

Файлом для выполнения может быть любой файл на вашем ПК, который вы хотите запустить, как только вы войдете в систему/появитесь. Вы можете использовать Обзор. кнопку, чтобы найти любой файл на вашем компьютере. Обратите внимание, что при выборе текстового файла (.txt), скорее всего, откроется текстовый редактор по умолчанию, поскольку скрипт просто запускает файл с помощью приложения по умолчанию. Это также означает, что запуск веб-ярлыков откроет ваш браузер по умолчанию и т. д.

После того, как все поля будут заполнены, вы можете нажать «Добавить персонажа», чтобы добавить вашего персонажа в файл настроек в папке документов (Documents\AutoHotkey\SAMP_FL\Settings.ini).

Сценарий не вступит в силу, пока не будет закрыто окно "Добавить персонажа". В этот момент скрипт перезагрузится и отобразит всплывающую подсказку, включая количество зарегистрированных символов. С этого момента все автоматизировано. Больше не нужно запускать скрипты вручную!

Если вы когда-нибудь решите создать нового персонажа и вам нужно будет добавить его имя, вы можете сделать это, щелкнув правой кнопкой мыши значок на панели задач (зеленый значок H) и выбрав "Добавить персонажа".

Примечания:
- Я не реализовал способ обнаружения смены персонажа в игре. Единственный способ автоматического переключения сценариев на этом этапе — это /q и повторный вход в систему.
— Я не реализовал удаление персонажей, поэтому, если один из ваших персонажей больше не используется, вам нужно будет вручную отредактировать INI-файл или удалите его и перезагрузите скрипт
- Если у вас возникли проблемы с запуском макросов (особенно в Win 10), я обнаружил, что запуск скриптов AHK от имени администратора решает проблему. Запуск этого скрипта от имени администратора также запустит все сценарии, которые этот скрипт запускает от имени администратора.

Код
Примечание. Для необработанного кода требуется, чтобы AutoHotkey был установлен в вашей системе, а код должен быть вставлен в файл .ahk.

Из-за определенных ограничений (а также из-за того, что EXE-файлы, как правило, не вызывают доверия) автономные приложения сейчас недоступны, но дайте мне знать через личное сообщение, если вам нужна ссылка для скачивания автономного исполняемого файла x86/x64.

Дополнительно
Если вы хотите, чтобы ваши сценарии автоматически закрывались при закрытии GTA SA, я рекомендую поместить следующий код в начало вашего сценария (перед любыми горячими клавишами/макросами)

Читайте также: