Конструкция if - else
#1

PHP код:
CMD:hp(playeridvehicleid)
{
    new 
Float:hp GetPlayerHealth(playeridhp);
    new 
Float:ahp GetPlayerArmour(playeridahp);
    new 
Float:vhp GetVehicleHealth(vehicleidvhp);
    new 
vehid GetPlayerVehicleID(playerid);
    
    if (
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
            if (
hp 100 && vhp 1000){
            
RepairVehicle(vehid);
            
SetPlayerHealth(playerid100);
            
SendClientMessage(playeridCOLOR_GREEN"Здоровье восстановлено, машина починена.");
            }else if (
hp == 100 && vhp != 1000){
            
RepairVehicle(vehid);
            
SendClientMessage(playeridCOLOR_GREEN"Машина починена. Восстановление здоровья не требуется.");
            }else{
SendClientMessage(playeridCOLOR_GREEN"Третее условие");
            }
            
        }
        
    else if (
GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
    {
        if (
hp <= 100 && ahp == 0)
        {
        
SetPlayerHealth(playerid100);
        
SendClientMessage(playeridCOLOR_GREEN"Здоровье восстановлено.");
        }
        else if (
hp 100 && ahp 100)
            {
            
SetPlayerHealth(playerid100);
            
SetPlayerArmour(playerid100);
            
SendClientMessage(playeridCOLOR_GREEN"Здоровье и броня восстановлены.");
            }
        else
        {
        
SendClientMessage(playeridCOLOR_GREEN"Условие после всех IF");
        }
    }
    else 
SendClientMessage(playeridCOLOR_RED"Ошибка!");
    return 
1;

if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER) = первое условие работает, второе никак не могу воспроизвести.

else if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) = срабатывает второе условие вместо первого.

ЧЯДНТ? (Что я делаю не так?)
Reply
#2

PHP код:
CMD:hp(playeridvehicleid)
{
    new 
Float:hp GetPlayerHealth(playeridhp);
    new 
Float:ahp GetPlayerArmour(playeridahp);
    new 
Float:vhp GetVehicleHealth(vehicleidvhp);
    if(
hp 100)
    {
        
SetPlayerHealth(playerid100);
        
SendClientMessage(playeridCOLOR_GREEN"Здоровье.");
    }
    if(
ahp 100)
    {
        
SetPlayerArmour(playerid100);
        
SendClientMessage(playeridCOLOR_GREEN"Броня");
    }
    if(
vehicleid && vhp 1000)
    {
        
RepairVehicle(vehicleid);
        
SendClientMessage(playeridCOLOR_GREEN"Машина");
    }
    return 
1;

зачем так усложнять? ты же команду пишешь...

[upd] не заметил что у тебя ранее vehicleid уже объявлена
Reply
#3

Quote:
Originally Posted by James_Braga
Посмотреть сообщение
PHP код:
CMD:hp(playeridvehicleid)
{
    new 
Float:hp GetPlayerHealth(playeridhp);
    new 
Float:ahp GetPlayerArmour(playeridahp);
    new 
Float:vhp GetVehicleHealth(vehicleidvhp);
    if(
hp 100)
    {
        
SetPlayerHealth(playerid100);
        
SendClientMessage(playeridCOLOR_GREEN"Здоровье.");
    }
    if(
ahp 100)
    {
        
SetPlayerArmour(playerid100);
        
SendClientMessage(playeridCOLOR_GREEN"Броня");
    }
    if(
vehicleid && vhp 1000)
    {
        
RepairVehicle(vehicleid);
        
SendClientMessage(playeridCOLOR_GREEN"Машина");
    }
    return 
1;

зачем так усложнять? ты же команду пишешь...

[upd] не заметил что у тебя ранее vehicleid уже объявлена
Так то оно так, но...

Все упирается в PLAYER_STATE. Тоесть я хочу, чтобы выполнялся тот или инной участок кода как при PLAYER_STATE_DRIVER так и при PLAYER_STATE_ONFOOT.
Reply
#4

PHP код:
if (GetPlayerState(playerid) == (PLAYER_STATE_ONFOOT || PLAYER_STATE_DRIVER)) 
этого ты хочешь ?
Reply
#5

Код смотри сначала, советчик.

0x002, у тебя в OnPlayerUpdate нигде return 0 нет? Обычно если где-то такое условие есть, то может пробивать и тогда GetPlayerState всегда одно и то же получает.
Reply
#6

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Код смотри сначала, советчик.

0x002, у тебя в OnPlayerUpdate нигде return 0 нет? Обычно если где-то такое условие есть, то может пробивать и тогда GetPlayerState всегда одно и то же получает.
Как вы уже догадались, возможно - пишу с new.pwn

Так как только начал постигать дзен PAWN-a - кол-во ошибок и рекомпилов растет в геометрической прогрессии правда почучуть начинаю разбираться.

Вернемся к коду: там просто имеется такого рода код, и все:

PHP код:
public OnPlayerUpdate(playerid)
{
    return 
1;

Как я понял, следует заменить return 1 на 0?
Reply
#7

Quote:
Originally Posted by 0x002
Посмотреть сообщение
Вернемся к коду: там просто имеется такого рода код, и все:

PHP код:
public OnPlayerUpdate(playerid)
{
    return 
1;

Как я понял, следует заменить return 1 на 0?
И ни кто не сможет играть.
Reply
#8

Нет, на ноль ставить не нужно - в этом паблике при любом раскладе должна возвращаться единица, иначе произойдёт рассинхронизация. Помню, в 0.3а мы так невидимость делали, а для других игроков это выглядело как в фильме "Телепорт".

Посмотри, у тебя тут совершенно разные 2 тачки:
Quote:

new Float:vhp = GetVehicleHealth(vehicleid, vhp);
new vehid = GetPlayerVehicleID(playerid);

На коленке набросал:
pawn Код:
CMD:hp(playerid, vehicleid)
{
    new Float:hp, Float:ahp, Float:vhp, pstate = GetPlayerState(playerid);
    GetPlayerHealth(playerid, hp);
    GetPlayerArmour(playerid, ahp);
    vehicleid = GetPlayerVehicleID(playerid);
    GetVehicleHealth(vehicleid, vhp);
    switch(pstate)
    {
        case PLAYER_STATE_DRIVER:
        {
            if (hp < 100.0 && vhp < 1000.0)
            {
                RepairVehicle(vehicleid);
                SetPlayerHealth(playerid, 100.0);
                SendClientMessage(playerid, COLOR_GREEN, "Здоровье восстановлено, машина починена.");
                return 1;
            }
            else if (hp == 100.0 && vhp != 1000.0)
            {
                RepairVehicle(vehicleid);
                SendClientMessage(playerid, COLOR_GREEN, "Машина починена. Восстановление здоровья не требуется.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_GREEN, "Третее условие");
        }
        case PLAYER_STATE_ONFOOT:
        {
            if(hp <= 100.0 && ahp < 1.0)
            {
                SetPlayerHealth(playerid, 100.0);
                SendClientMessage(playerid, COLOR_GREEN, "Здоровье восстановлено.");
                return 1;
            }
            else if(hp < 100.0 && ahp < 100.0)
            {
                SetPlayerHealth(playerid, 100.0);
                SetPlayerArmour(playerid, 100.0);
                SendClientMessage(playerid, COLOR_GREEN, "Здоровье и броня восстановлены.");
                return 1;
            }
            else return SendClientMessage(playerid, COLOR_GREEN, "Условие после всех IF");
        }
        default: return SendClientMessage(playerid, COLOR_RED, "Ошибка!");
    }
    return 1;
}
Reply
#9

PHP код:
CMD:hp(playeridvehicleid)
{
    
vehicleid GetPlayerVehicleID(playerid);
    new 
Float:hp;
    
GetPlayerHealth(playeridhp);
    new 
Float:ahp;
    
GetPlayerArmour(playeridahp);
    new 
Float:vhp;
    
GetVehicleHealth(vehicleidvhp);
    new 
pstate GetPlayerState(playerid);
    
    switch(
pstate)
    {
        case 
PLAYER_STATE_DRIVER:
        {
            if (
hp 100.0 && vhp 1000.0)
            {
                
RepairVehicle(vehicleid);
                
SetPlayerHealth(playerid100.0);
                
SendClientMessage(playeridCOLOR_GREEN"* Iaoeia ii?eiaia, cai?iaua ainnoaiiaeaii.");
            }
            else if (
hp == 100.0 && vhp 1000.0)
            {
                
RepairVehicle(vehicleid);
                
SendClientMessage(playeridCOLOR_GREEN"* Iaoeia ii?eiaia. Ainnoaiiaeaiea cai?iauy ia o?aaoaony.");
            }
            else if (
hp 100.0 && vhp == 1000.0)
            {
                
SetPlayerHealth(playerid100.0);
                
SendClientMessage(playeridCOLOR_GREEN"* Cai?iaua ainnoaiiaeaii. Iaoeia a ii?eiea ia io?aaaony.");
            }
            else 
SendClientMessage(playeridCOLOR_YELLOW"* Ii?eiea iaoeiu e ainnoaiiaeaiea cai?iauy ia o?aaoaony");
        }
        case 
PLAYER_STATE_ONFOOT:
        {
            if(
hp 100.0 && ahp 100.0)
            {
                
SetPlayerHealth(playerid100.0);
                
SetPlayerArmour(playerid100.0);
                
SendClientMessage(playeridCOLOR_GREEN"* Cai?iaua e a?iiy ainnoaiiaeaiu.");
            }
            else if(
hp == 100.0 && ahp 100.0)
            {
                
SetPlayerArmour(playerid100.0);
                
SendClientMessage(playeridCOLOR_GREEN"* A?iiy ainnoaiiaeaia. Ainnoaiiaeaiea cai?iauy ia o?aaoaony.");
            }
            else if (
hp 100.0 && ahp == 100.0)
            {
                
SetPlayerHealth(playerid100.0);
                
SendClientMessage(playeridCOLOR_GREEN"* Cai?iaua ainnoaiiaeaii. Ainnoaiiaeaiea a?iie ia o?aaoaony.");
            }
            else 
SendClientMessage(playeridCOLOR_YELLOW"* Ainnoaiiaeaiea a?iie e cai?iauy ia o?aaoaony!");
        }    
        default: 
SendClientMessage(playeridCOLOR_RED"* Nenoaiiay ioeaea, ia?aoeoanu e aaieieno?aoi?o!");
    }
    return 
1;

Извините за кодировку, исправите сами.

Забирайте кому надо, работоспособность проверена.

Не забудьте за include <zcmd>.

Тему можно закрыть.
Reply
#10

Quote:

new Float:hp = GetPlayerHealth(playerid, hp);

Вот я начудил)) Даже не заметил. Поправил пост.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)