PDA

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



Albert
29.12.2014, 19:30
Создал зону с действием.

if(IsPlayerInRangeOfPoint(playerid, 50.0, -2155.3828,-2314.1523,30.4765))
{
new Float:PH;
new Float:armour;
if (GetPlayerArmour(playerid, armour) <== 0 //Если броня игрока меньше либо рова нулю, то
{
GetPlayerHealth(playerid, PH); //Узнаём сколько хп на данный момент у игрока
SetPlayerHealth(playerid, PH-10); //Отнимаем 10 хп
SetPlayerDrunkLevel (playerid, 3000);
SendClientMessage(playerid, 0xAA3333AA, "* Вы в радиоактивной зоне!");
}
false //Иначе (Если есть броня)
[
SetPlayerArmour(playerid, armour); //узнаём сколько брони на игроке
SetPlayerArmour(playerid, armour-1); // отнимаем 1 единицу брони
SendClientMessage(playerid, 0xAA3333AA, "* Вы в радиоактивной зоне!");



Хочу сделать так:
Если броня меньше либо рава нулю, то отнимается 10 ХП, даётся уровень опьянения 3000 и сообщение в чат
Иначе отнимается 1 единица брони и сообщение в чат

Однако выдаёт ошибки:

E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(524) : error 029: invalid expression, assumed zero
E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(524 -- 525) : error 029: invalid expression, assumed zero
E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(531 -- 532) : error 028: invalid subscript (not an array or too many subscripts): "false"
E:\Program Files\Virtual Reality\SA-MP 0.3z Windows Server\gamemodes\S.T.A.L.K.E.R..pwn(536) : error 029: invalid expression, assumed zero

Ban_Diaz
29.12.2014, 21:23
if (GetPlayerArmour(playerid, armour) <== 0 - Ты во первых скобку не закрыл, и второе причем тут
false //Иначе (Если есть броня) false значит лож, а иначе как я знаю обозначается так
else
И вообще в коде бред какой то:


if(IsPlayerInRangeOfPoint(playerid, 50.0, -2155.3828,-2314.1523,30.4765))
{
new Float:PH;
new Float:armour;
if (GetPlayerArmour(playerid, armour) <= 0) //Если броня игрока меньше либо рова нулю, то
{
GetPlayerHealth(playerid, PH); //Узнаём сколько хп на данный момент у игрока
SetPlayerHealth(playerid, PH-10); //Отнимаем 10 хп
SetPlayerDrunkLevel (playerid, 3000);
SendClientMessage(playerid, 0xAA3333AA, "* Вы в радиоактивной зоне!");
}
else { //Иначе (Если есть броня)
SetPlayerArmour(playerid, armour); //узнаём сколько брони на игроке
SetPlayerArmour(playerid, armour-1); // отнимаем 1 единицу брони
SendClientMessage(playerid, 0xAA3333AA, "* Вы в радиоактивной зоне!"); }
Табуляцию сам исправь если конечно у тебя pragma tabsize не стоит)

Albert
30.12.2014, 18:07
if(IsPlayerInRangeOfPoint(playerid, 50.0, -2155.3828,-2314.1523,30.4765))
{

new Float:armour;
if (GetPlayerArmour(playerid, armour) <= 0) //Åñëè áðîíÿ èãðîêà ìåíüøå ëèáî ðîâà íóëþ, òî
{
new Float:PH;
GetPlayerHealth(playerid, PH); //Óçíà¸ì ñêîëüêî õï íà äàííûé ìîìåíò ó èãðîêà
SetPlayerHealth(playerid, PH-10); //Îòíèìàåì 10 õï
SetPlayerDrunkLevel (playerid, 3000);
SendClientMessage(playerid, 0xAA3333AA, "* Âû â ðàäèîàêòèâíîé çîíå!");
PlayAudioStreamForPlayer(playerid,"http://stalker-samp.ucoz.ru/Radiaciya.mp3"); //ON MUSIC
}
else { //Èíà÷å (Åñëè åñòü áðîíÿ)

GetPlayerArmour(playerid, armour); //óçíà¸ì ñêîëüêî áðîíè íà èãðîêå
SetPlayerArmour(playerid, armour-1); // îòíèìàåì 1 åäèíèöó áðîíè
SendClientMessage(playerid, 0xAA3333AA, "* Âû â ðàäèîàêòèâíîé çîíå!"); }
PlayAudioStreamForPlayer(playerid,"http://stalker-samp.ucoz.ru/Radiaciya.mp3"); //ON MUSIC
}


Когда нет брони при первом разе ничего не происходит, а на второй раз выдаётся броня (100 или больше). А должно если нет брони, то отниматься хп, а если есть броя, то хп не отниматься, а отниматься броня.

Подскажите пожалуйста как исправить код?

L0ndl3m
30.12.2014, 18:32
GetPlayerArmour насколько я знаю void возвращает. Как вы собрались проверять значение функции?
Сначала получите количество брони, а потом сравнивайте значение переменной с числом, а не значение функции с числом.

Albert
30.12.2014, 18:41
Огромное спасибо. Вот рабочий код:



if(IsPlayerInRangeOfPoint(playerid, 50.0, -2155.3828,-2314.1523,30.4765))
{

new Float:armour;
new Float:PH;
GetPlayerArmour(playerid, armour);
if (armour != 0) //Åñëè áðîíÿ èãðîêà ìåíüøå ëèáî ðîâà íóëþ, òî
{
GetPlayerArmour(playerid, armour); //óçíà¸ì ñêîëüêî áðîíè íà èãðîêå
SetPlayerArmour(playerid, armour -1); // îòíèìàåì 1 åäèíèöó áðîíè
SendClientMessage(playerid, 0xAA3333AA, "* Âû â ðàäèîàêòèâíîé çîíå!");
PlayAudioStreamForPlayer(playerid,"http://stalker-samp.ucoz.ru/Radiaciya.mp3"); //ON MUSIC
}
else { //Èíà÷å (Åñëè åñòü áðîíÿ)

GetPlayerHealth(playerid, PH); //Óçíà¸ì ñêîëüêî õï íà äàííûé ìîìåíò ó èãðîêà
SetPlayerHealth(playerid, PH -10); //Îòíèìàåì 10 õï
SetPlayerDrunkLevel (playerid, 3000);
SendClientMessage(playerid, 0xAA3333AA, "* Âû â ðàäèîàêòèâíîé çîíå!");
PlayAudioStreamForPlayer(playerid,"http://stalker-samp.ucoz.ru/Radiaciya.mp3"); //ON MUSIC
}
}

Проблема решена. Чтоб я без бас всех делал... :good: