PDA

Просмотр полной версии : [Вопрос] 2 разные проверки в одном паблике



Albert
04.01.2015, 18:43
Вот создал паблик который работает на таймере 5 минут


public Eject()
{
if(weatherid == 700)
{
for(new i = GetMaxPlayers() - 1; i != -1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerInAnyVehicle(i) || GetPlayerInterior(i) != 0)
continue;
else
SetPlayerHealth(i, 0.0);
SetWeather(1);
SendClientMessageToAll(0xAA3333AA, "Выброс закончился!!!");
weatherid = 1;

}

}

if(pInfo[playerid][pInfect] >= 15)
{
new Float:PH;
SetPlayerHealth(playerid, PH-15);
SendClientMessage(playerid, 0xAA3333AA, "* Вы заражены радиацией. Потеря 15 PH");
}

}


Исправно работает лишь первая часть. Захотел вставить вторую проверку которая не имеет ничего общего с первой (просто для пятиминутного таймера):


if(pInfo[playerid][pInfect] >= 15)
{
new Float:PH;
SetPlayerHealth(playerid, PH-15);
SendClientMessage(playerid, 0xAA3333AA, "* Вы заражены радиацией. Потеря 15 PH");
}

Начало выдавать 3 ошибки на эти новые строки:


E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(1330) : error 017: undefined symbol "playerid"
E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(1333) : error 017: undefined symbol "playerid"
E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(1334) : error 017: undefined symbol "playerid"


В чём может быть проблема? Может отдельный паблик создать? А как тогда к томуже привезать к таймеру?

L0ndl3m
04.01.2015, 21:56
Нужно вставлять в тот же цикл, но вместо playerid писать название переменной, к которой мы обращаемся, в данном случае это i.

Albert
04.01.2015, 22:03
Мне надо чтобы это не зависело от if(weatherid == 700). Совсем новое условие. Сосем другая проверка. независемо от weatherid т. е. нужно так?:

if(pInfo[i][pInfect] >= 15)
{
new Float:PH;
SetPlayerHealth(i, PH-15);
SendClientMessage(playerid, 0xAA3333AA, "* Вы заражены радиацией. Потеря 15 PH");
}

L0ndl3m
04.01.2015, 22:11
А сообщение будете снова отправлять неизвестной переменной playerid? Это всё относится к этому.

Создавайте новый цикл. Только так:


if(weatherid == 700)
{
// цикл
}
else
{
// другой цикл, в котором будет Ваш новый код
}

Пока что могу это предложить.

Albert
04.01.2015, 22:45
А сообщение будете снова отправлять неизвестной переменной playerid? Это всё относится к этому.

Создавайте новый цикл. Только так:


if(weatherid == 700)
{
// цикл
}
else
{
// другой цикл, в котором будет Ваш новый код
}

Пока что могу это предложить.


всёравно ошибки

L0ndl3m
04.01.2015, 23:44
Какие?

Albert
05.01.2015, 09:41
Проблемма решена. Должно было быть так:



forward Eject();

public Eject()
{
if(weatherid == 700)
{
for(new i = GetMaxPlayers() - 1; i != -1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerInAnyVehicle(i) || GetPlayerInterior(i) != 0)
continue;
else
SetPlayerHealth(i, 0.0);
SetWeather(1);
SendClientMessageToAll(0xAA3333AA, "Выброс закончился!!!");
weatherid = 1;

}


}


for(new i = GetMaxPlayers() - 1; i != -1; i--) // Потребности
{
pInfo[i][pInfect] += 1;
pInfo[i][pHunger] += 1;


if(pInfo[i][pInfect] >= 5)
{
new Float:ph;
GetPlayerHealth(i, ph);
SetPlayerHealth(i, ph - 5);
SendClientMessage(i, 0xAA3333AA, "* Вы заражены радиацией. Потеря 5 PH");
}


else if(pInfo[i][pInfect] >= 15)
{
new Float:ph;
GetPlayerHealth(i, ph);
SetPlayerHealth(i, ph - 15);
SendClientMessage(i, 0xAA3333AA, "* Вы заражены радиацией. Потеря 15 PH");
}
else if(pInfo[i][pInfect] >= 25)
{
new Float:ph;
GetPlayerHealth(i, ph);
SetPlayerHealth(i, ph - 25);
SendClientMessage(i, 0xAA3333AA, "* Вы заражены радиацией. Потеря 25 PH");

}


if(pInfo[i][pHunger] >= 5)
{
new Float:ph;
GetPlayerHealth(i, ph);
SetPlayerHealth(i, ph - 5);
SendClientMessage(i, 0xAA3333AA, "* Вы голодны. Потеря 5 PH");
}


else if(pInfo[i][pInfect] >= 15)
{
new Float:ph;
GetPlayerHealth(i, ph);
SetPlayerHealth(i, ph - 15);
SendClientMessage(i, 0xAA3333AA, "* Вы очень голодны. Потеря 15 PH");
}


}





}