PDA

Просмотр полной версии : [Вопрос] Крашит компилятор.



annas2001
20.08.2019, 18:17
Вот собственно код:

new Bar:hunger = CreateProgressBar(548.00, 105.00, 58.50, 3.19, -1933154646, 100.0);
new Bar:thirst = CreateProgressBar(548.00, 116.00, 58.50, 3.20, 2026960298, 100.0);
new Bar:need = CreateProgressBar(548.00, 127.00, 58.50, 3.20, -32598, 100.0);

Если я объявляю переменные как глобальные и присваиваю функцию CreateProgressBar, у меня перестает как-то реагировать компилятор, не выдает ни ошибок, вообще ничего, получается что-то вот это:

https://i.yapx.ru/FEAJf.jpg

Самое удивительное то, что если я объявляю переменные в каком-нибудь паблике, например OnPlayerSpawn, то компилятор нормально работает. Так как это прогресс бары нужды, голода и жажды, мне необходимо чтобы эти переменные были глобальными, как это сделать так, чтобы компилятор подавал хоть какие-то признаки жизни?

Nexius_Tailer
20.08.2019, 18:40
Поставь для теста этот (https://github.com/pawn-lang/compiler/releases/tag/v3.10.8), если стоит обычный.

annas2001
20.08.2019, 18:57
Поставь для теста этот (https://github.com/pawn-lang/compiler/releases/tag/v3.10.8), если стоит обычный.

Компилятор то теперь работает, но как исправить ошибки, которые он теперь выдает?

D:\сервер\gamemodes\new.pwn(68) : error 029: invalid expression, assumed zero
D:\сервер\gamemodes\new.pwn(69) : error 029: invalid expression, assumed zero
D:\сервер\gamemodes\new.pwn(70) : error 029: invalid expression, assumed zero
D:\сервер\gamemodes\new.pwn(2023) : error 055: start of function body without function header
D:\сервер\gamemodes\new.pwn(2025) : error 010: invalid function or declaration

- - - Добавлено - - -

На строки 2023 и 2025 обращать внимания не стоит, ошибку выдает именно из за 68, 69 и 70, где непосредственно само объявление переменных.

DeimoS
20.08.2019, 19:52
Эмм, ну так переменные создавай глобально, а текстдравы создавай уже при подключении и записывай их ID в переменные.

То бишь:
// Глобально
new Bar:hunger;
new Bar:thirst;
new Bar:need;

//OnPlayerConnect
hunger = CreateProgressBar(548.00, 105.00, 58.50, 3.19, -1933154646, 100.0);
thirst = CreateProgressBar(548.00, 116.00, 58.50, 3.20, 2026960298, 100.0);
need = CreateProgressBar(548.00, 127.00, 58.50, 3.20, -32598, 100.0);

annas2001
20.08.2019, 21:38
Эмм, ну так переменные создавай глобально, а текстдравы создавай уже при подключении и записывай их ID в переменные.

То бишь:
// Глобально
new Bar:hunger;
new Bar:thirst;
new Bar:need;

//OnPlayerConnect
hunger = CreateProgressBar(548.00, 105.00, 58.50, 3.19, -1933154646, 100.0);
thirst = CreateProgressBar(548.00, 116.00, 58.50, 3.20, 2026960298, 100.0);
need = CreateProgressBar(548.00, 127.00, 58.50, 3.20, -32598, 100.0);

Я уже пыталась так делать, но проблема в том, что мне нужно создать ТАЙМЕР, чтобы значения прогресс баров со временем уменьшались.

DeimoS
20.08.2019, 23:45
Ну так в чём проблема? Ты создаёшь прогресс бары при подключении игрока и там же создаёшь таймер на их обновление (либо используешь уже созданный таймер). А уже внутри функции, которую будет вызывать таймер, обновляешь значение прогресс баров соответствующей функцией, указывая переменную, в которую был записан их ID при создании.

То бишь, будет как-то так:
enum e_PLAYER_PROGRESS_BAR_LIST
{
Bar:ppbHunger,
Bar:ppbThirst,
Bar:ppbNeed
};
new pProgressBar[MAX_PLAYERS][e_PLAYER_PROGRESS_BAR_LIST];


public OnPlayerConnect(playerid)
{
pProgressBar[playerid][ppbHunger] = CreateProgressBar(548.00, 105.00, 58.50, 3.19, -1933154646, 100.0);
// ...
}



public OnPlayerDisconnect(playerid, reason)
{
DestroyProgressBar(pProgressBar[playerid][ppbHunger]);
pProgressBar[playerid][ppbHunger] = Bar:0;
// ...
}




//Таймер
{
SetProgressBarValue(pProgressBar[playerid][ppbHunger], /*Новое значение*/); // Обновили значение прогресс бара
UpdatePlayerProgressBar(playerid, pProgressBar[playerid][ppbHunger]);// Показали изменения игроку
}