Не могу скомпилировать скрипт — 4 ошибки, undefined symbol (PAWN Help)

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Кто с мечом к нам придёт, от меча и погибнет!
Активный
Регистрация
7 Мар 2025
Сообщения
227
Всем привет! Я новичок в Pawn, и столкнулся с проблемой при компиляции своего скрипта.

Пишу систему контейнеров, и не могу понять из-за чего вылезают ошибки компиляции.

Компилятор выдаёт вот такие ошибки:
Erros:
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 017: undefined symbol "ContainersTimeLeft"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 001: expected token: ";", but found "]"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 029: invalid expression, assumed zero
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.10.8        Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.


Я пытался объявлять массивы, но всё равно что-то не так. Возможно, переменные неправильно оформлены или не хватает нужных include'ов.

Я использую:
- Pawn Compiler 3.10.8
- Мод SA-MP на основе `new.pwn`
- Несколько массивов: `ContainersTimeLeft`, `g_ContainerPickup`, `ContainersTimerId` и т.д.

Буду очень благодарен, если кто-то поможет разобраться, в чём именно проблема. Похоже, где-то синтаксическая ошибка или неправильная инициализация массива.

Строка:
public ContainerCountdown(i)
{
    if (!ContainersIsActive[i]) return 0;

    ContainersTimeLeft[i] -= 60;

    if (ContainersTimeLeft[i] <= 0)
    {
        ContainersIsActive[i] = false;

        DestroyPickup(g_ContainerPickup[i]);
        Delete3DTextLabel(g_Container3DText[i]);

        KillTimer(ContainersTimerId[i]);

        new msg[64];
        format(msg, sizeof(msg), "Контейнер #%d был успешно удалён!", i);
        SendClientMessageToAll(0x00FF00FF, msg);

        return 0;
    }

    return 1;
}
 
Последнее редактирование:
Кто с мечом к нам придёт, от меча и погибнет!
Активный
Регистрация
7 Мар 2025
Сообщения
227
error 001: expected token: ";", but found "]" в коде не видно ; и ]
Та я знаю что ошибка говорит про ; и ], но сам я в коде не вижу, где именно проблема — всё вроде бы закрыто правильно.
 
Пользователь
Регистрация
24 Фев 2025
Сообщения
50
#### 1 "undefined symbol" ("неопределенный символ"):
```bash
error 017: undefined symbol "ContainersTimeLeft"
```
Эта ошибка говорит нам о том, что компилятор не нашел определение переменной `ContainersTimeLeft`. Вероятно, она объявлена локально или вовсе отсутствует. Решение:

```pawn
new ContainersTimeLeft[MAX_CONTAINERS];
```

Максимальное значение `MAX_CONTAINERS` выбирается исходя из потребностей твоего проекта.

#### 2: Ошибка "expected token ';'" ("ожидается точка с запятой"):
```bash
error 001: expected token: ";", but found "]"
```
Здесь компилятор указывает на неверный синтаксис в строке 33381. Мб произошла ошибка при индексации массива или. Чек.

#### Проблема 3: Ошибка "invalid expression":
```bash
error 029: invalid expression, assumed zero
```
Данная ошибка возникает, когда компилятор встречает некорректное выражение. Чаще всего это происходит, если неправильно указан индекс массива или пропущено условие.
 
Пользователь
Регистрация
18 Май 2024
Сообщения
128
#### 1 "undefined symbol" ("неопределенный символ"):
```bash
error 017: undefined symbol "ContainersTimeLeft"
```
Эта ошибка говорит нам о том, что компилятор не нашел определение переменной `ContainersTimeLeft`. Вероятно, она объявлена локально или вовсе отсутствует. Решение:

```pawn
new ContainersTimeLeft[MAX_CONTAINERS];
```

Максимальное значение `MAX_CONTAINERS` выбирается исходя из потребностей твоего проекта.

#### 2: Ошибка "expected token ';'" ("ожидается точка с запятой"):
```bash
error 001: expected token: ";", but found "]"
```
Здесь компилятор указывает на неверный синтаксис в строке 33381. Мб произошла ошибка при индексации массива или. Чек.

#### Проблема 3: Ошибка "invalid expression":
```bash
error 029: invalid expression, assumed zero
```
Данная ошибка возникает, когда компилятор встречает некорректное выражение. Чаще всего это происходит, если неправильно указан индекс массива или пропущено условие.
а без чатгпт можешь?
 
Пользователь
Регистрация
18 Май 2024
Сообщения
128
Всем привет! Я новичок в Pawn, и столкнулся с проблемой при компиляции своего скрипта.

Пишу систему контейнеров, и не могу понять из-за чего вылезают ошибки компиляции.

Компилятор выдаёт вот такие ошибки:
Erros:
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 017: undefined symbol "ContainersTimeLeft"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 001: expected token: ";", but found "]"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 029: invalid expression, assumed zero
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.10.8        Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.


Я пытался объявлять массивы, но всё равно что-то не так. Возможно, переменные неправильно оформлены или не хватает нужных include'ов.

Я использую:
- Pawn Compiler 3.10.8
- Мод SA-MP на основе `new.pwn`
- Несколько массивов: `ContainersTimeLeft`, `g_ContainerPickup`, `ContainersTimerId` и т.д.

Буду очень благодарен, если кто-то поможет разобраться, в чём именно проблема. Похоже, где-то синтаксическая ошибка или неправильная инициализация массива.

Строка:
public ContainerCountdown(i)
{
    if (!ContainersIsActive[i]) return 0;

    ContainersTimeLeft[i] -= 60;

    if (ContainersTimeLeft[i] <= 0)
    {
        ContainersIsActive[i] = false;

        DestroyPickup(g_ContainerPickup[i]);
        Delete3DTextLabel(g_Container3DText[i]);

        KillTimer(ContainersTimerId[i]);

        new msg[64];
        format(msg, sizeof(msg), "Контейнер #%d был успешно удалён!", i);
        SendClientMessageToAll(0x00FF00FF, msg);

        return 0;
    }

    return 1;
}
сделай определение ContainersTimeLeft и ошибки пропадут.
 
Кто с мечом к нам придёт, от меча и погибнет!
Активный
Регистрация
7 Мар 2025
Сообщения
227
#### 1 "undefined symbol" ("неопределенный символ"):
```bash
error 017: undefined symbol "ContainersTimeLeft"
```
Эта ошибка говорит нам о том, что компилятор не нашел определение переменной `ContainersTimeLeft`. Вероятно, она объявлена локально или вовсе отсутствует. Решение:

```pawn
new ContainersTimeLeft[MAX_CONTAINERS];
```

Максимальное значение `MAX_CONTAINERS` выбирается исходя из потребностей твоего проекта.

#### 2: Ошибка "expected token ';'" ("ожидается точка с запятой"):
```bash
error 001: expected token: ";", but found "]"
```
Здесь компилятор указывает на неверный синтаксис в строке 33381. Мб произошла ошибка при индексации массива или. Чек.

#### Проблема 3: Ошибка "invalid expression":
```bash
error 029: invalid expression, assumed zero
```
Данная ошибка возникает, когда компилятор встречает некорректное выражение. Чаще всего это происходит, если неправильно указан индекс массива или пропущено условие.
Если бы чат гпт хоть что-то дельное говорил, я бы сюда не лез. Он только очевидности пишет, типа "переменная не объявлена — объяви переменную" Он даже в код не вникает, просто лепит общие фразы из мануала. Я не просто так сюда пришёл — потому что тут сидят реальные люди, которые реально разбираются, а не болванчик, повторяющий теорию наугад.
 
Активный
Регистрация
30 Дек 2023
Сообщения
229
Всем привет! Я новичок в Pawn, и столкнулся с проблемой при компиляции своего скрипта.

Пишу систему контейнеров, и не могу понять из-за чего вылезают ошибки компиляции.

Компилятор выдаёт вот такие ошибки:
Erros:
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 017: undefined symbol "ContainersTimeLeft"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 001: expected token: ";", but found "]"
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : error 029: invalid expression, assumed zero
C:\Users\Артем\Desktop\мод конты\баго фикс донат\gamemodes\new.pwn(33381) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.10.8        Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.


Я пытался объявлять массивы, но всё равно что-то не так. Возможно, переменные неправильно оформлены или не хватает нужных include'ов.

Я использую:
- Pawn Compiler 3.10.8
- Мод SA-MP на основе `new.pwn`
- Несколько массивов: `ContainersTimeLeft`, `g_ContainerPickup`, `ContainersTimerId` и т.д.

Буду очень благодарен, если кто-то поможет разобраться, в чём именно проблема. Похоже, где-то синтаксическая ошибка или неправильная инициализация массива.

Строка:
public ContainerCountdown(i)
{
    if (!ContainersIsActive[i]) return 0;

    ContainersTimeLeft[i] -= 60;

    if (ContainersTimeLeft[i] <= 0)
    {
        ContainersIsActive[i] = false;

        DestroyPickup(g_ContainerPickup[i]);
        Delete3DTextLabel(g_Container3DText[i]);

        KillTimer(ContainersTimerId[i]);

        new msg[64];
        format(msg, sizeof(msg), "Контейнер #%d был успешно удалён!", i);
        SendClientMessageToAll(0x00FF00FF, msg);

        return 0;
    }

    return 1;
}
OFFTOP

компилятор не нашёл переменную вот и высрал тебе плюсом про ; ]



ы:
#define MAX_CONTAINERS 0
stock static ContainersTimeLeft[MAX_CONTAINERS] = {0, ...};
public ContainerCountdown(containerID)
{
    if (!ContainersIsActive[containerID]) return 0;

    ContainersTimeLeft[containerID] -= 60;

    if (ContainersTimeLeft[containerID] <= 0)
    {
        ContainersIsActive[containerID] = false;

        DestroyPickup(g_ContainerPickup[containerID]);
        Delete3DTextLabel(g_Container3DText[containerID]);

        KillTimer(ContainersTimerId[containerID]);

        new msg[64];
        format(msg, sizeof(msg), "Контейнер #%d был успешно удалён!", containerID);
        SendClientMessageToAll(0x00FF00FF, msg);

        return 0;
    }

    return 1;
}

OFFTOP

#define у тебя уже должен или может быть, что за i? куда логичнее хотябы id или containerID

 
Сверху