|
Зачастую люди, играя в SA:MP, сталкиваются с вылетами игры в самый неподходящий момент. После вылета игры появляется окошко, в котором показан адрес, по которому произошёл краш игры. Благодаря этому адресу порой можно найти причину краша и устранить её. В данной теме мы рассмотрим популярные адреса крашей и их решение. Все решения взяты с открытых источников (интернета и данного форума)
• Частые случаи крашей:
Адрес: 0x007F0BF7
Причина: Некорректная работа установленной модели машины / присутствует тюнинг на машине которая её не поддерживает
Решение: Удалить последние установленные модификации связанные с изменением моделей автомобилей
Адрес: 0x006E3D17
Причина: Смена скина в то время, пока персонаж находится в машине/садится в нее
Адрес: 0x00544BC8 / 0x00536DF4
Причина: Прогружено очень много объектов в зоне стрима (превышен лимит игры)
Решение: Установить антикрашер и обновлять зону стрима
Причина: Поврежденная папка audiostreams
Решение: Переустановить папку audiostreams из чистой сборки
• Редкие случаи крашей:
Адрес: 0x0059F8B4
Причина: Клиент не может загрузить объект из файла samp.img
Решение: Переустановить SA:MP в сборку с игрой + установить антикрашер
Адрес: 0x0040F64C
Причина: Проблема с разрешением экрана
Решение: Обновить клиент SA:MP до более актуальной версии
Адрес: 0x0058370A
Причина: Изменение координат игрока на большое расстояние во время посадки в машину (телепорт администрации)
Решение: Для игрока: установить антикрашер, для администратора: дождаться пока игрок полностью окажется в автомобиле
• Пользовательские случаи крашей (Актуально):
Адрес: 0x007324B6 (тема)
Причина: Несуществующий объект/проблема с маппингом на сервере. В большинстве случаев проблема со сборкой игры
Решение: Поставить чистый gta3.img или убрать моды после которых начал проявляться краш
Адрес: 0x00728365 (тема)
Причина: Неправильно установленный худ
Решение: Поставить оригинальный худ или удалить установленный ранее худ
Адрес: 0x00746929 (тема)
Причина: Проблема с совместимостью SA:MP/GTA
Решение: Выставить совместимость игры в свойствах ярлыка (SA:MP / GTA) для (Windows XP / Windows 95)
• Если вашего адреса нету или вы скачали готовую сборку и игра крашит:
- Проверить установленные модификации на конфликты между собой
- Удалить скрипты/плагины из сборки которыми вы не пользуетесь
- Установить антикрашер
- Установить скрипты которые исправляют некоторые ошибки игры из раздела Фиксы
Список часто встречаемых ошибок в pawno
Данная тема содержет наиболее распространенные ошибки и предупреждения в pawno при создании скриптов sa-mp
Когда компилятор находит ошибку в файле, то выводится сообщение, в таком порядке:
- Имя файла
- номер строки компилятора были обнаружены ошибки в скобках, непосредственно за именем
- класс error (ошибка, фатальная ошибка или предупреждение)
- номер ошибки
- описание ошибки
Например:
hello.pwn(3) : error 001: expected token: ";", but found "{"
Примечание: эта ошибка может быть на линии, над линией, что показано, так как компилятор не всегда может установить ошибку перед проанализировав полное выражение.
Категории ошибок
Ошибки разделяются на три класса:
Ошибки (errors)
- Описание ситуации когда компилятор не может скомпилировать код
- Ошибки номеруются от 1 до 99
Критические ошибки (Fatal errors)
- Критические ошибки и описание, от которых компилятор не может восстановиться.
- Парсинг прерывается (нет отклика программы).
- Критические ошибки номеруются от 100 до 199.
Предупреждения ( Warings )
- Предупреждения указывают на возможную причину возникновения багов, вылетов.
- Предупреждения номеруются от 200 до 299.
Распространенные ошибки
001: expected token (ожидаемый знак)
Обязательный знак отсутствует
Пример:
error 001: expected token: ";", but found "return" main() { print("test") // тут должна быть точка с запятой ";" return 1; }
002: only a single statement (or expression) can follow each “case” (только одно выражение может быть в одной строке с «case»
В каждом case оператора switch без фигурных скобок может содержаться только один оператор если больше нужно ставить скобки.
Пример:
error 002: only a single statement (or expression) can follow each "case"
main() { switch(x) { case 0: print("hello"); print("hello"); } return 1; }
Так же могут быть еще и предупреждения и дополнительные ошибки:
error 002: only a single statement (or expression) can follow each "case" warning 215: expression has no effect error 010: invalid function or declaration
Вот так это можно исправить:
main() { switch(x) { case 0: { print("hello"); print("hello"); } } return 1; }
004: function «x» is not implemented (Функция «x» не используется
Часто бывает что в функции выше пропущена скобка.
025: function heading differs from prototype
Это проиходит когда в функции не совпадают аргументы.
К примеру:
forward MyFunction(playerid); public MyFunction(player, vehicleid);
Исправляем:
forward MyFunction(playerid, vehicleid); public MyFunction(playerid, vehicleid);
035: argument type mismatch (argument x) (не совпадение типов аргумента(ов)
К примеру когда в место playerid — integer аргумента стоит «playerid» — string или 0.5 — float
Пример:
error 035: argument type mismatch (argument 1)
Kick("playerid"); // Как видите в место целого числа (integer) стоит строка
Исправляем:
Kick(playerid);
046: unknown array size (variable x)
Не указан размер массива.
Пример:
new string[]; string = "pawno";
Исправляем:
new string[6]; string = "pawno";
047: array sizes do not match, or destination array is too small
Размер массива мал или не совпадает.
- Многомерные массивы должны иметь одинаковый размер
- Одномерные массив к которому присваивают(правый должен иметь больше размер чем левый.
new destination[8]; new msg[] = "Hello World!"; destination = msg;
В приведенном выше коде размер строки «Hello world!» ровна 12 байт а массив к которому присваиваем имеет размер 8 байт из этого и складывается ошибка.
Если увеличить размер массива destination до 13 байт то ошибка исправится.
new destination[13]; new msg[] = "Hello World!"; destination = msg;
055: start of function body without function header
Начало тела функции без функции заголовка.
Критические ошибки (FATAL ERRORS)
100: cannot read from file: "<file>"
Компилятор не может найти или прочитать указанный файл, убедитесь что он находится по адресу (<папка с сервером>pawnoinclude).
Пример:
#include <a_sam>
Исправляем:
#include <a_samp>
Совет
Не нужно открывать ваш код дважды, не нужно тыкать несколько раз на файл. Откройте сначала редактор, потом ваш проект.
Предупреждения( Warnings )
202: number of arguments does not match definition
Описание ошибки довольно понятное, это значит что вы используете слишком мало или слишком много аргументов в функции, обычно это признак того что функция используется не правильно, обратитесь к документации.
Функция GetPlayerHealth согласно официальному источнику wiki.sa-mp.com имеет два аргумента playerid и Float:health ссылка
Пример:
GetPlayerHealth(playerid);
Исправляем:
new Float:health; GetPlayerHealth(playerid, health);
203: symbol is never used: «symbol»
Вы создали переменную или функцию и она ни где не используется тогда ищите в окне компилятора это предупреждение, это не как не влияет на код и не угражает ему, так что если вы удалите переменную или функцию которая не используется, то вы сэкономите память.
Пример:
stock SomeFunction() { // Blah }
204: symbol is assigned a value that is never used: «symbol»
Это предупреждение аналогично к предыдущему, разница в том что к переменной что то присвоено и оно не как не используется, это безопасно
209: function should return a value
Функция ничего не возвращает, вы создали её:
SomeFunction() { // Blah }
Решили её присвоить к чему нибудь к примеру:
new result = SomeFunction(); // ожидает 1
Вот так исправить
SomeFunction() { // Blah return 1; }
211: possibly unintended assignment
Если вы введете оператор присваивания в условии и оно не будет в круглых скобках то будет предупреждение
if(vehicle = GetPlayerVehicleID(playerid)) // ошибка if(vehicle == GetPlayerVehicleID(playerid)) // все норм if((vehicle = GetPlayerVehicleID(playerid))) // все норм, так значение функции присвоится к переменной потом выражение вычесляется { то есть это как if(IsPlayerConnected(playerid)}
213: tag mismatch ( несовпадение тегов)
Это происходит когда:
- Тип переменной указан не верно или не имеет его
- Выражения по обе стороны бинарного оператора имеют разные теги
- В пременную возвращен не верный тип переменной или не имеющий его.
- Индексирование массива, который требует тегами индекс без тега или неправильное имя тега
Часто это бывает на 3d текстах или тексдравах Text3D, Text
Не правильно:
new health; GetPlayerHealth(playerid, health);
Правильно:
new Float:health; GetPlayerHealth(playerid, health);
217: loose indentation
Компилятор выдаст ошибку если не соблюдены отступы.
Правильно:
if(condition) { action(); result(); }
Не правильно:
if(condition) { action(); result(); }
Отступы делаются по нажатью кнопки TAB это практика в программировании для удобного чтения кода.
219: local variable «foo» shadows a variable at a preceding level
Локальная переменная в тени глобальной то есть над локальной переменной создана точно такая же глобальная. В практике программирования префиксом глобальной переменной является «g» в начале переменной к примеру
new gPlayerMoney
любыми способами избегайте их.
К примеру:
new team[MAX_PLAYERS]; // объявляем глобальную переменную function(playerid) { new team[MAX_PLAYERS]; // создаем еще одну, и получаем статью 219 кодекса ошибок :D team[playerid] = random(5); }
Решение:
Просто переименуйте локальную переменную team.
225: unreachable code ( недоступный код )
Это происходит тогда когда вы пишите какой нибудь код после return, после return’а код не выполняется и он считается бесполезным
Пример:
#include <zcmd.inc>
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); return 1; // завершаем процесс } else { SendClientMessage(playerid, -1, "Вы не администратор"); return 1; // завершаем процесс } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // Этот код не доступен он не будет выполнятся. }
Решение:
CMD:jetpack(playerid, params[]) { #pragma unused params if(IsPlayerAdmin(playerid)) { SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK); } else { SendClientMessage(playerid, -1, "Вы не администратор"); } SendClientMessage(playerid, -1, "Вы ввели команду /jp"); // этот код запустится return 1; // завершаем процесс }
235: public function lacks forward declaration (symbol «symbol»)
Отсутствует forward.
Не правильно:
public MyFunction() { }
Правильно:
forward MyFunction(); public MyFunction() { }
Надеюсь эта статья поможет вам в языке программирования, желаю вам не повторять ошибок дважды и что бы ваш код был быстрым, надежным!
Оставляйте ваши отзывы, ставьте плюсы, пишите недостатки ошибки, недостатки статьи или их недочеты. Удачи в мире PAWNO!
Как исправить ошибку SAMP 0x0040fb80 Exception At Address?
Ошибка с кодом 0x0040fb80 в SA-MP сопровождается сообщением Exception At Address и препятствует подключению к серверу. Ей характерен вылет в момент синхронизации с любым сервером игры, независимо от ее расположения еще до момента полной загрузки. Похоже, дело в каких-то неполадках самой операционной системы Windows 10, 8, 7 64-бит. Пока есть всего пара исправления данной ошибки, в работоспособности которых мы не сомневаемся.
Как выглядит сообщение об ошибки:
Exception At Address: 0x0040FB80
Что нужно сделать:
- Запустить в режиме совместимости. Самый действенный способ, который срабатывает практически всегда. Нужно всего лишь нажать правой кнопкой мыши по exe-файлу игры и выбрать «Свойства». Затем на вкладке «Совместимость» следует установить флажок возле «Запустить программу в режиме совместимости». Стоит попробовать первый же вариант «Windows 8» (для тех, у кого стоит Windows 10). У пользователей с Windows 7 преимущественно срабатывает режим совместимости с «Windows 98/Windows Me». Выбрав нужный параметр следует нажать на кнопку «Применить» и закрыть окно.
- Изменить название папки. На одной из форумов пользователь написал, что у него сработал такой простой способ. Достаточно найти каталог, где расположен игровой клиент SA-MP и добавить к нему одну букву или цифру. Затем следует попробовать запустить SAMP и указать путь к только что измененной директории. Может сработать.
- Последний вариант – переустановка. Его имеет смысл использовать тогда, когда остальные не помогли.
Теперь вы знаете все известные способы исправить ошибку Exception At Address: 0x0040FB80 в GTA San Andreas Multiplayer. Сколько бы разговоров на тему данного сбоя не проводилось на форумах, все всегда сводится к этим методам.
У некоторых игроков клиент мультиплеерной версии GTA San Andreas отказывается запускаться, выдавая ошибку Unable to execute. Это значит, что программа samp.exe не может быть выполнена. Причин тому может быть фактически что угодно — от несовместимости игры с системой до неполадок в структуре файлов GTA. Рассмотрим наиболее распространенные случаи возникновения ошибки Unable to execute в SAMP, и рассмотрим, что делать в этой ситуации.
Почему возникает ошибка Unable to execute в SA-MP
Ошибка случается не при запуске окна SAMP с выбором сервера, а при старте самого клиента GTA San Andreas. При этом, как правило, остается возможность запуска одиночной игры, проблема возникает только с файлом samp.exe.
Чаще всего неполадка Unable to execute связана с:
- проблемами совместимости — игра довольно старая, и на современных системах (Windows 8, 8.1 и 10) может работать неправильно;
- сбоем настроек игры;
- нарушением связи между программой для выбора сервера и клиентом игры;
- блокировкой файла samp.exe антивирусной программой;
- проблемами с файлами игры.
Исправить проблему довольно просто; в некоторых случаях может потребоваться переустановка GTA San Andreas или мультиплеерного клиента. далее я опишу действия, что нужно делать при ошибке Unable to execute в SAMP.
Как исправить ошибку
В большинстве случаев решить проблему помогает изменение свойств файла samp.exe. По нему нужно кликнуть правой кнопкой мыши, выбрать пункт «Свойства» и выполнить одно из следующих действий:
- Включить режим совместимости с более старой системой — начиная от Windows 95 и дальше, пока игра не запустится.
- Воспользоваться режимом автоматического исправления проблем совместимости — система попробует подобрать параметры, подходящие для запуска SAMP.
- Запустить программу от имени администратора.
Поломка файла, в котором хранятся настройки игры, приводит к невозможности запуска как SAMP, так и самой GTA San Andreas. Исправить это можно, удалив проблемный файл, gta_sa.set, который находится в директории C:UsersИмя пользователяDocumentsGTA San Andreas User Files. После этого нужно запустить игру — свежий файл настроек создастся автоматически.
Проблема также может возникать из-за того, что при установке SAMP был указан неправильный путь к исполнительному файлу GTA San Andreas. Исправить это можно, нажав на пиктограмму шестеренок в окне выбора сервера, находящуюся рядом с полем для ввода имени игрока. В появившемся окне следует указать правильную директорию.
Блокировка SAMP антивирусом происходит не автоматически, а из-за ошибки пользователя. Случается это, если установить антивирусное ПО (например, Kaspersky Anti-Virus) затем включить игру и в появившемся окне запретить запуск приложения. Чтобы исправить это, нужно добавить файл samp.exe в исключения антивируса. Делается это через настройки программы, конкретный порядок действий зависит от ПО. Если разблокировать игру не получается, на время ее запуска антивирус можно отключать — это тоже избавит от ошибки Unable to execute в SAMP.
Часто к проблемам с запуском GTA приводит установка различных модов, которые подменяют оригинальные файлы игры. В случае с SAMP мешать нормальной работе программы может мод MTA, также предназначенный для мультиплеерной игры в GTA. Чтобы устранить ошибку, нужно удалить этот мод.
Если ничто не помогает исправить Unable to execute, придется переустановить саму игру и мультиплеерный мод, внимательно проверив все настройки программы. Зная, что делать при ошибке Enable to execute в SA-MP, вы сможете быстро решить возникшую проблему.
Опубликовано 07.06.2017 Обновлено 28.04.2021