• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Обработка нажатия Alt (OnPlayerKeyStateChange)

Kirill Nikitin

Новичок
Здравствуйте!

Возникла проблема обработки нажатия кнопки Alt в паблике OnPlayerKeyStateChange. Использую эту кнопку для нескольких действий в моде.
Ловлю нажатие с помощью:
Код:
#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
Все взаимодействия на кнопку прописаны в одной проверке (можно посмотреть в файле на pastebin по ссылке ниже или под спойлером)

Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
    new playerState = GetPlayerState(playerid);
    if(PRESSED(KEY_WALK)){ // ALT
        if(GetPVarInt(playerid, "NearATM") == 1){ // Использование банкомата
            SCM(playerid, -1, "сработало использование банкомата");
            if(PlayerInfo[playerid][pHaveBank] == 0) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: У Вас не открыт банковский счет. Открыть его можно в центральном банке.");
            if(GetPVarInt(playerid, "EnterBankCode") != 1){
                SetPVarInt(playerid, "UseATM", 1);
                return ShowPlayerDialog(playerid, 96, DIALOG_STYLE_INPUT, !"{2ac1fc}Ввод пин-кода", !"{FFFFFF}Пожалуйста, введите пин-код от Вашего банковского счета:", !"Далее", !"Отмена");
            }
            ShowAtmMenu(playerid);
        }
        if(GetPVarInt(playerid, "UseHouse") + 1 != 0){
            new id = GetPVarInt(playerid, "UseHouse");
            new ho = PlayerInfo[playerid][pHouse];
            if(ho > 0){
                ho--;
                if(IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[ho][hexit_pos_x],HouseInfo[ho][hexit_pos_y], HouseInfo[ho][hexit_pos_z])){
                    SetPlayerPos(playerid, HouseInfo[ho][hpost_pos_x], HouseInfo[ho][hpost_pos_y], HouseInfo[ho][hpost_pos_z]);
                    SetPlayerVirtualWorld(playerid, 0);
                    SetPlayerInterior(playerid, 0);
                    DeletePVar(playerid, "UseHouse");
                }
            }
            if(!IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[id][hexit_pos_x],HouseInfo[id][hexit_pos_y], HouseInfo[id][hexit_pos_z])) return 1;
            if(playerState != PLAYER_STATE_ONFOOT) return 1;
            SetPlayerPos(playerid, HouseInfo[id][hpost_pos_x], HouseInfo[id][hpost_pos_y], HouseInfo[id][hpost_pos_z]);
            SetPlayerVirtualWorld(playerid, 0);
            SetPlayerInterior(playerid, 0);
            DeletePVar(playerid, "UseHouse");
            return 1;
        }
        if(IsPlayerInRangeOfPoint(playerid, 2.0, 1996.7817, -2141.1035, 13.8369)){
            if(!IsAGang(playerid)) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вам недоступно данное действие.");
            ShowPlayerDialog(playerid, 156, DIALOG_STYLE_MSGBOX, !"{2ac1fc}Ограбления", !"{FFFFFF}Привет, я Джеймс. Могу помочь тебе с небольшой подработкой.\n\
            Она не совсем легальна, но поможет поднять немного бабла. Ты в деле?\n\n{cecece}(( Доступно только от 2-их игроков ))", !"Далее", !"Отмена");
            return 1;
        }
        if(GetPVarInt(playerid, "InBiz") == 1){
            new idx = GetPVarInt(playerid, "UseBiz");
            idx--;
            if(IsPlayerInRangeOfPoint(playerid, 2.0, BizInfo[idx][bexit_pos_x],BizInfo[idx][bexit_pos_y], BizInfo[idx][bexit_pos_z])){
                SetPlayerPos(playerid, BizInfo[idx][benter_pos_x]+1, BizInfo[idx][benter_pos_y]+1, BizInfo[idx][benter_pos_z]);
                SetPlayerVirtualWorld(playerid, 0);
                SetPlayerInterior(playerid, 0);
                DeletePVar(playerid, "InBiz");
                return 1;
            }
            for(new idxx = 0; idxx < TOTALBIZ; idxx++){
                if(!IsPlayerInRangeOfPoint(playerid, 2.0, BizInfo[idxx][bmenu_pos_x],BizInfo[idxx][bmenu_pos_y], BizInfo[idxx][bmenu_pos_z])) continue;
                if(playerState != PLAYER_STATE_ONFOOT) continue;
                switch(BizInfo[idxx][bType]){
                    case 1: {
                        ShowPlayerDialog(playerid, 58, DIALOG_STYLE_TABLIST_HEADERS, !"{2ac1fc}Магазин", "{FFFFFF}Наименование\t{FFFFFF}Цена\n\
                            1) Часы\t$250\n\
                            2) Музыкальный плеер\t$500\n\
                            3) Третий пункт\t$500\n\
                            4) Четвертый пункт\t$500",
                            !"Купить", !"Закрыть");
                        SetPlayerCameraPos(playerid, -29.893146, -88.255142, 1004.991638);
                        SetPlayerCameraLookAt(playerid, -27.021083, -92.125396, 1003.660339);
                        TogglePlayerControllable(playerid, 0);
                    }
                    case 3: {
                        ShowPlayerDialog(playerid, 59, DIALOG_STYLE_TABLIST_HEADERS, !"{2ac1fc}Магазин оружия", "{FFFFFF}Наименование\t{FFFFFF}Цена\n\
                            1) Первый пункт\t$250\n\
                            2) Второй пункт\t$500\n\
                            3) Третий пункт\t$500\n\
                            4) Четвертый пункт\t$500",
                            !"Купить", !"Закрыть");
                        SetPlayerCameraPos(playerid, 291.286010, -78.361701, 1003.518981);
                        SetPlayerCameraLookAt(playerid, 294.638977, -81.931396, 1002.511596);
                        TogglePlayerControllable(playerid, 0);
                    }
                    case 4: {
                        if(PlayerInfo[playerid][pJob] != JOB_NONE) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Сначала закончите работу.");
                        if(PlayerInfo[playerid][pWorkDay] != 0) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Покупка одежды невозможна в рабочей форме.");
                        new vw = GetPlayerVirtualWorld(playerid);
                        SetPVarInt(playerid, "BuySkinVW", vw);
                        SetPlayerVirtualWorld(playerid, playerid+1);
                        SetPlayerPos(playerid, 179.5161, -88.3430, 1002.0234);
                        SetPlayerFacingAngle(playerid, 90.6246);
                        TogglePlayerControllable(playerid, 0);
                        InterpolateCameraPos(playerid, 165.497497, -85.819900, 1003.593750, 175.187667, -88.775680, 1003.192077, 2500);
                        InterpolateCameraLookAt(playerid, 162.215164, -82.216476, 1002.479492, 180.088577, -87.982833, 1002.598449, 2500);
                        if(PlayerInfo[playerid][pSex] == 0) {
                            SetPlayerSkin(playerid, BuySkinListMan[0]);
                            ShowMenuForPlayer(BuySkinMenu, playerid);
                        } else if(PlayerInfo[playerid][pSex] == 1) {
                            SetPlayerSkin(playerid, BuySkinListWoman[0]);
                            ShowMenuForPlayer(BuySkinMenu, playerid);
                        }
                    }
                }
            }
        }
        if(RoadInfo[playerid][RoadStage] == 4 && playerState == PLAYER_STATE_ONFOOT){
            if(IsPlayerInRangeOfPoint(playerid, 7.0, GetPVarFloat(playerid, "RoadX"), GetPVarFloat(playerid, "RoadY"), GetPVarFloat(playerid, "RoadZ"))){
                RoadInfo[playerid][RoadStage] = 5;
                ApplyAnimation(playerid, "BOMBER","BOM_Plant_Loop",4.0,1,0,0,0,0);
                SendClientMessage(playerid, COLOR_INFO, !"Отлично! Теперь Ваша задача залатать все повреждения в дорожном покрытии. Для этого нажимайте на проблемые участки мышью.");
                CreateRoadTextDraw(playerid);
                for(new r; r < 12; r++) PlayerTextDrawShow(playerid, RoadTD[playerid][r]);
                SelectTextDraw(playerid, COLOR_RED);
            }
        }
        if(IsPlayerInRangeOfPoint(playerid, 2.0, -470.5761, 640.3542, 2002.0641) && playerState == PLAYER_STATE_ONFOOT){ // Покупка симки
            if(PlayerInfo[playerid][pPhoneNumber] == 0){
                ShowPlayerDialog(playerid, 84, DIALOG_STYLE_INPUT, !"{2ac1fc}Покупка номера телефона", !"{FFFFFF}Вы действительно хотите купить номер телефона?\nЭто позволит Вам звонить и отправлять СМС-сообщения другим жителям нашего штата.\nСтоимость сим-карты: {89cc43}$500.\n\n{FFFFFF}Введите желаемый номер:\n* Количество символов в номере равно 6.", !"Купить", !"Отмена");
            } else return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: У Вас уже есть приобретенный номер телефона.");
        }
        if(IsPlayerInRangeOfPoint(playerid, 1.5, 1410.9691, -28.7692, 1000.9559) || IsPlayerInRangeOfPoint(playerid, 1.5, 1411.0300, -32.2882, 1000.9559) || IsPlayerInRangeOfPoint(playerid, 1.5, 1410.8512, -35.7726, 1000.9559) && playerState == PLAYER_STATE_ONFOOT){ // Банк
            TogglePlayerControllable(playerid, 0);
            if(PlayerInfo[playerid][pHaveBank] == 0) return ShowPlayerDialog(playerid, 94, DIALOG_STYLE_MSGBOX, !"{2ac1fc}Создание банковского счета", !"{FFFFFF}Чтобы полноценно воспользоваться услугами центрального банка, Вам необходимо\n\
            открыть свой банковский счет и карту.\n\nВы хотите открыть счет и выпустить банковскую карточку?\nСтоимость услуги {89cc43}$500.", !"Далее", !"Отмена");
            if(GetPVarInt(playerid, "EnterBankCode") != 1) return ShowPlayerDialog(playerid, 96, DIALOG_STYLE_INPUT, !"{2ac1fc}Ввод пин-кода", !"{FFFFFF}Пожалуйста, введите пин-код от Вашего банковского счета:", !"Далее", !"Отмена");
            return ShowBankMenu(playerid);
        }
        if(pTemp[playerid][pACLesson] == 1){
            if(IsPlayerInRangeOfPoint(playerid, 1.0, -2039.7117, -149.5839, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.4235, -149.4693, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2039.8478, -152.5959, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.5691, -152.4428, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2039.8954, -155.1333, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.3699, -155.1447, 1218.9719)){
                ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, !"{2ac1fc}Теоретическая часть экзамена", !"{FFFFFF}Предлагаем Вам сдать теоретическую часть экзамена.\nДля этого Вам необходимо уверенно знать правила дорожного движения и\nоплатить прохождение теста.\n\nСтоимость прохождения теоретической части: {89cc43}$500.", !"Далее", !"Отмена");
                TogglePlayerControllable(playerid, 0);
            }
        }
        if(pTemp[playerid][pACLesson] != 1){
            if(IsPlayerInRangeOfPoint(playerid, 1.0, -2039.7117, -149.5839, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.4235, -149.4693, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2039.8478, -152.5959, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.5691, -152.4428, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2039.8954, -155.1333, 1218.9719) || IsPlayerInRangeOfPoint(playerid, 1.0, -2036.3699, -155.1447, 1218.9719)){
                SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вы еще не прочитали ПДД, либо уже сдали теоретическую часть.");
            }
        }
        if(PlayerInfo[playerid][pJob] == JOB_COM && ComInfo[playerid][ComStage] == 2 && playerState == PLAYER_STATE_ONFOOT){
            new Float:posX, Float:posY, Float:posZ;
            posX = GetPVarFloat(playerid, "Com:pos_tree_x");
            posY = GetPVarFloat(playerid, "Com:pos_tree_y");
            posZ = GetPVarFloat(playerid, "Com:pos_tree_z");
            if(IsPlayerInRangeOfPoint(playerid, 5.0, posX, posY, posZ)){
                new veh = GetNearVeh(playerid, 20.0);
                if(veh == GetPVarInt(playerid, "WorkCar")) {
                    SendClientMessage(playerid, COLOR_INFO, !" ");
                    SendClientMessage(playerid, COLOR_INFO, !"Вы прибыли к дереву. Теперь его нужно срубить. Нажимайте Y или N в нужные моменты.");
                    ComInfo[playerid][ComStage] = 3;
                    ComInfo[playerid][ComGameAmount] = 0;
                    comtimer[playerid] = SetTimerEx("ComGame", 1500, true, "i", playerid);
                    TogglePlayerControllable(playerid, 0);
                    ApplyAnimation(playerid, "CHAINSAW", "WEAPON_csaw", 4.1, 1, 0, 0, 0, 0);
                } else {
                    return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Рядом с Вами нет рабочего транспорта коммунальной службы.");
                }
            }
        }
    }
    if(PRESSED(16)){
        new str[144];
        if(IsAArmy(playerid)){
            for(new idx = 0; idx < TOTALPOSTS; idx++){ // Занятие поста в армии
                if(!IsPlayerInRangeOfPoint(playerid, 2.0, PostInfo[idx][pPosX], PostInfo[idx][pPosY], PostInfo[idx][pPosZ])) continue;
                if(playerState != PLAYER_STATE_ONFOOT) continue;
                if(PostInfo[idx][pFraction] != PlayerInfo[playerid][pMember]) return true;
                if(PostInfo[idx][pStatus] == 1 && GetPVarInt(playerid, "OnArmyPost") != 1) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Данный пост уже занят.");
                if(PostInfo[idx][pStatus] == 1 && GetPVarInt(playerid, "OnArmyPost") == 1 && PostInfo[idx][pPlayer] == playerid){
                    DeletePVar(playerid, "OnArmyPost");
                    PostInfo[idx][pStatus] = 0;
                    PostInfo[idx][pPlayer] = INVALID_PLAYER_ID;
                    format(str, sizeof(str), "{2ac1fc}Пост: {FFFFFF}%s [ID: %d]\n{2ac1fc}Статус: {FFFFFF}Свободен\n{2ac1fc}Используйте F, чтобы занять пост", PostInfo[idx][pName], PostInfo[idx][pID]);
                       Update3DTextLabelText(PostInfo[idx][pText], -1, str);
                       HidePostTimer(playerid);
                       SendClientMessage(playerid, COLOR_INFO, !"Вы успешно окончили дежурство на этом посту.");
                       pTemp[playerid][pArmyPost] = 0;
                       return 1;
                }
                if(PlayerInfo[playerid][pWorkDay] != 1) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Сначала начните рабочий день.");
                if(GetPVarInt(playerid, "OnArmyPost") > 0) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вы уже заняли другой пост.");
                SetPVarInt(playerid, "OnArmyPost", 1);
                PostInfo[idx][pStatus] = 1;
                PostInfo[idx][pPlayer] = playerid;
                pTemp[playerid][pArmyPost] = idx;
                format(str, sizeof(str), "{2ac1fc}Пост: {FFFFFF}%s [ID: %d]\n{2ac1fc}Статус: {FFFFFF}Занят\n{2ac1fc}На посту: {FFFFFF}%s", PostInfo[idx][pName], PostInfo[idx][pID], GetName(playerid));
                   Update3DTextLabelText(PostInfo[idx][pText], -1, str);
                   ShowPostTimer(playerid);
                   SendClientMessage(playerid, COLOR_INFO, !"Вы успешно встали на данный пост. Чтобы уйти с дежурства, просто отойдите от поста, либо нажмите F.");
            }
        }
        if(PlayerInfo[playerid][pHospitalType] == 1){
            for(new idx = 1; idx < TOTALHOSPITALBEDS; idx++){
                if(!IsPlayerInRangeOfPoint(playerid, 1.0, HospitalBed[idx][bed_xpos], HospitalBed[idx][bed_ypos], HospitalBed[idx][bed_zpos])) continue;
                if(playerState != PLAYER_STATE_ONFOOT) continue;
                new Float:h;
                GetPlayerHealth(playerid, h);
                if(h >= 60.0) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вам не требуется лечение в палате.");
                if(PlayerInfo[playerid][pHospitalType] == 2) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вы уже заняли другую кровать. Дождитесь окончания лечения.");
                if(HospitalBed[idx][bedStatus] == 1) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Данная кровать уже занята. Займите другую.");
                HospitalBed[idx][bedStatus] = 1;
                PlayerInfo[playerid][pHospitalType] = 2;
                HospitalTimer[playerid] = SetTimerEx("HospitalHeal", 2000, true, "i", playerid);
                format(str, sizeof(str), "{89cc43}Кровать №%d\nСтатус: {FFFFFF}Занята\n{89cc43}Пациент: {FFFFFF}%s", idx, GetName(playerid));
                Update3DTextLabelText(HospitalBed[idx][bedText], -1, str);
                HospitalBed[idx][bedPlayer] = playerid;
                SetPVarInt(playerid, "HospitalBedId", idx);
                SendClientMessage(playerid, COLOR_LIME, !"Вы успешно заняли данную кровать. Дождитесь окончания лечения, либо обратитесь ко врачу.");
                return 1;
            }
        }
        if(IsPlayerInRangeOfPoint(playerid, 4.0, 1117.852050, -1869.417968, 3054.737060)){
            if(playerState == PLAYER_STATE_ONFOOT && PlayerInfo[playerid][pJob] == JOB_POST){
                MoveDynamicObject(postDoor, 1117.851562, -1869.417968, 3054.737060, 0.05, 0.0, 0.0, 180.0);
                SetTimer("postDoorClose", 4000, 0);
            } else {
                SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вход на склад доступен только сотрудникам отделения.");
                return 1;
            }
        }
        if(playerState == PLAYER_STATE_SPECTATING){ // Меню слежки
            if(GetPVarInt(playerid, "SelectSpecTD")){
                CancelSelectTextDraw(playerid);
                SetPVarInt(playerid, "SelectSpecTD", 0);
            } else {
                SelectTextDraw(playerid, 0xFF2AC1FCFF);
                SetPVarInt(playerid, "SelectSpecTD", 1);
            }
        }
    }
    if(PRESSED(1) && playerState == PLAYER_STATE_DRIVER){
        if(EngineReset[playerid] > gettime()) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Нельзя так часто заводить/глушить двигатель.");
        new vehid = GetPlayerVehicleID(playerid);
        ToggleVehicleEngine(vehid);
        new string[60];
        new engine, lights, alarm, doors, bonnet, boot, objective;
        GetVehicleParamsEx(vehid, engine, lights, alarm, doors, bonnet, boot, objective);
        if(VehInfo[vehid][vFuel] <= 0){
            SetVehicleParamsEx(vehid, false, false, alarm, doors, bonnet, boot, objective);
            SendClientMessage(playerid, COLOR_RED, !"Кажется, в Вашей машине закончился бензин.");
            VehInfo[vehid][vFuel] = 0;
            return 1;
        }
        if(PlayerInfo[playerid][pSex] == 0 && engine == 1){
            format(string, sizeof(string), "%s завел двигатель транспорта", PlayerInfo[playerid][pName]);
        } else if(PlayerInfo[playerid][pSex] == 0 && engine == 0){
            format(string, sizeof(string), "%s заглушил двигатель транспорта", PlayerInfo[playerid][pName]);
        }
        if(PlayerInfo[playerid][pSex] == 1 && engine == 1){
            format(string, sizeof(string), "%s завела двигатель транспорта", PlayerInfo[playerid][pName]);
        } else if(PlayerInfo[playerid][pSex] == 1 && engine == 0){
            format(string, sizeof(string), "%s заглушила двигатель транспорта", PlayerInfo[playerid][pName]);
        }
        EngineReset[playerid] = gettime()+3;
         ProxDetector(playerid, 10, COLOR_PURPLE, string);
    }
    if(PRESSED(262144) && playerState == PLAYER_STATE_ONFOOT){
        if(PlayerInfo[playerid][pLogged] != 0){
            ShowInv(playerid);
            SelectTextDraw(playerid, 0x2AC1FCAA);
           }
    }
    if(playerState == PLAYER_STATE_DRIVER && PRESSED(4) || playerState == PLAYER_STATE_DRIVER && PRESSED(4096)){
        new vehid = GetPlayerVehicleID(playerid);
        ToggleVehicleLights(vehid);
    }
    if(newkeys == KEY_YES){ // Y
        new str[300];
        switch(pTemp[playerid][pTargetAction]){
            case ACTION_HI:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new Float:angle, string[64];
                new Float:X, Float:Y, Float:Z;
                GetPlayerPos(playerid, X, Y, Z);
                GetPlayerFacingAngle(targetid, angle);
                SetPlayerFacingAngle(playerid, angle + 180);
                format(string, sizeof(string), "%s пожал%s руку %s", GetName(playerid), (PlayerInfo[targetid][pSex] == 0)?(""):("а"), GetName(targetid));
                IsPlayerNearCmd(15.0, string, COLOR_PURPLE, X, Y, Z);
                if(!IsPlayerInAnyVehicle(playerid)) ApplyAnimation(playerid, "GANGS", "hndshkfa", 4.1, 0, 1, 1, 0, 0, 1);
                if(!IsPlayerInAnyVehicle(targetid)) ApplyAnimation(targetid, "GANGS", "hndshkfa", 4.1, 0, 1, 1, 0, 0, 1);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_KISS:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new Float:angle, string[64];
                new Float:X, Float:Y, Float:Z;
                GetPlayerPos(playerid, X, Y, Z);
                GetPlayerFacingAngle(targetid, angle);
                SetPlayerFacingAngle(playerid, angle + 180);
                format(string, sizeof(string), "%s поцеловал%s %s", GetName(playerid), (PlayerInfo[targetid][pSex] == 0)?(""):("а"), GetName(targetid));
                IsPlayerNearCmd(15.0, string, COLOR_PURPLE, X, Y, Z);
                if(!IsPlayerInAnyVehicle(playerid)) ApplyAnimation(playerid,"BD_FIRE","PLAYA_KISS_03",4.0,0,0,0,0, 0,1);
                if(!IsPlayerInAnyVehicle(targetid)) ApplyAnimation(targetid,"BD_FIRE","GRLFRD_KISS_03",4.0,0,0,0, 0,0,1);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_SELL_HOUSE:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new houseprice = GetPVarInt(playerid, "SellHousePrice");
                 new houseID = GetPVarInt(playerid, "SellHouseID");
                 houseID--;
                 PlayerInfo[targetid][pHaveH] = 0;
                 PlayerInfo[targetid][pHouse] = 0;
                 MysqlUpdatePlayerInt(targetid, "house", PlayerInfo[targetid][pHouse]);
                 MysqlUpdatePlayerInt(targetid, "haveh", PlayerInfo[targetid][pHaveH]);
                 PlayerInfo[playerid][pHaveH] = 1;
                 PlayerInfo[playerid][pHouse] = houseID+1;
                 MysqlUpdatePlayerInt(playerid, "house", PlayerInfo[targetid][pHouse]);
                 MysqlUpdatePlayerInt(playerid, "haveh", PlayerInfo[targetid][pHaveH]);
                 strmid(HouseInfo[houseID][hOwner], PlayerInfo[playerid][pName], 0, strlen(PlayerInfo[playerid][pName]), 255);
                 HouseInfo[houseID][hOwned] = 1;
                 DestroyVehicle(PlayerInfo[targetid][pVehicle]);
                 if(PlayerInfo[playerid][pVehicleModel] != 0){
                     HouseInfo[houseID][hHouse_Car] = PlayerInfo[playerid][pVehicleModel];
                     PlayerInfo[playerid][pVehicle] = CreateVehicle(HouseInfo[houseID][hHouse_Car],HouseInfo[houseID][hcar_pos_x],HouseInfo[houseID][hcar_pos_y],HouseInfo[houseID][hcar_pos_z],HouseInfo[houseID][hcar_pos_angle],HouseInfo[houseID][hCar_Color_1],HouseInfo[houseID][hCar_Color_2], -1);
                 }
                 if(PlayerInfo[playerid][pVehicleModel] == 0){
                     HouseInfo[houseID][hHouse_Car] = 462;
                     PlayerInfo[playerid][pVehicle] = CreateVehicle(HouseInfo[houseID][hHouse_Car],HouseInfo[houseID][hcar_pos_x],HouseInfo[houseID][hcar_pos_y],HouseInfo[houseID][hcar_pos_z],HouseInfo[houseID][hcar_pos_angle],HouseInfo[houseID][hCar_Color_1],HouseInfo[houseID][hCar_Color_2], -1);
                 }
                 SaveHouse(houseID);
                 UpdateHouseAfterBuy(houseID);
                format(str, sizeof(str), "Вы успешно продали свой дом №%d игроку %s[%d] за {FFFFFF}$%d.", houseID+1, GetName(playerid), playerid, houseprice);
                SendClientMessage(targetid, COLOR_BLUE, str);
                TransferMoney(playerid, targetid, houseprice);
                MoneyLogsEngine(playerid, targetid, houseprice, "Buy house from player");
                format(str, sizeof(str), "Вы успешно купили дом №%d за {FFFFFF}$%d.", houseID+1, houseprice);
                SendClientMessage(playerid, COLOR_BLUE, str);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_SELL_BIZ:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new bizpricesell = GetPVarInt(playerid, "SellBizPrice");
                 new bizID = GetPVarInt(playerid, "SellBizID");
                 bizID--;
                 PlayerInfo[targetid][pBiz] = 0;
                 MysqlUpdatePlayerInt(targetid, "biz", PlayerInfo[targetid][pBiz]);
                 PlayerInfo[playerid][pBiz] = bizID+1;
                 MysqlUpdatePlayerInt(playerid, "biz", PlayerInfo[playerid][pBiz]);
                 strmid(BizInfo[bizID][bOwner], PlayerInfo[playerid][pName], 0, strlen(PlayerInfo[playerid][pName]), 255);
                 BizInfo[bizID][bOwned] = 1;
                 SaveBiz(bizID);
                UpdateBiz(bizID);
                format(str, sizeof(str), "Вы успешно продали свой бизнес №%d игроку %s[%d] за {FFFFFF}$%d.", bizID+1, GetName(playerid), playerid, bizpricesell);
                SendClientMessage(targetid, COLOR_BLUE, str);
                format(str, sizeof(str), "Вы успешно купили бизнес №%d за {FFFFFF}$%d.", bizID+1, bizpricesell);
                SendClientMessage(playerid, COLOR_BLUE, str);
                TransferMoney(playerid, targetid, bizpricesell);
                MoneyLogsEngine(playerid, targetid, bizpricesell, "Buy business from player");
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_PARTY_INVITE:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new party = GetPVarInt(playerid, "PartyInvite:Party");
                if(PlayerInfo[playerid][pPartyMember] != -1){
                    SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Вы уже состоите в партии. Предложение отменено.");
                    SendClientMessage(targetid, COLOR_ERROR, !"Ошибка: Игрок уже состоит в партии. Предложение отменено.");
                    pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                    pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                    pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                    pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                    return pTemp[playerid][pTargetAction] = ACTION_NONE;
                }
                PlayerInfo[playerid][pPartyMember] = party + 1;
                MysqlUpdatePlayerInt(playerid, "partymember", PlayerInfo[playerid][pPartyMember]);
                format(str, sizeof(str), "%s[%d] принял Ваше предложение вступить в партию.", GetName(playerid), playerid);
                SendClientMessage(targetid, COLOR_BLUE, str);
                SendClientMessage(playerid, COLOR_BLUE, !"Вы успешно приняли предложение вступить в партию.");
                DeletePVar(playerid, "PartyInvite:Party");
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_PARTY_SHOWTICKET:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new party = GetPVarInt(playerid, "PartyTicket:Party");
                new Float:pos[3];
                format(str, sizeof(str), "{FFFFFF}Участник партии:\t\t{2ac1fc}%s\n\n{FFFFFF}Название партии:\t\t{2ac1fc}%s\n{FFFFFF}Лидер партии:\t\t{2ac1fc}%s\n{FFFFFF}Дата регистрации:\t\t{2ac1fc}%s\n\n{FFFFFF}Девиз партии: {2ac1fc}%s", GetName(targetid), PartyInfo[party][pName], PartyInfo[party][pLeader], PartyInfo[party][pRegDate], PartyInfo[party][pSubTitle]);
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{2ac1fc}Партийный билет", str, "Закрыть", "");
                format(str, sizeof(str), "%s[%d] принял Ваше предложение просмотреть партийный билет.", GetName(playerid), playerid);
                SendClientMessage(targetid, COLOR_BLUE, str);
                GetPlayerPos(targetid, pos[0], pos[1], pos[2]);
                SetPlayerChatBubble(targetid, "показал(а) свой партийный билет", COLOR_PURPLE, 15.0, 4000);
                format(str, sizeof(str), "%s показал%s свой партийный билет %s", GetName(targetid), (PlayerInfo[targetid][pSex] == 0)?(""):("а"), GetName(playerid));
                IsPlayerNearCmd(15.0, str, COLOR_PURPLE, pos[0], pos[1], pos[2]);
                DeletePVar(playerid, "PartyTicket:Party");
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_SHOW_LICENSES:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new Float:pos[3];
                format(str, sizeof(str), "{FFFFFF}Лицензия\t{FFFFFF}Состояние\n\
                {FFFFFF}Водительское удостоверение\t%s\n{FFFFFF}Удостоверение пилота\t%s\n{FFFFFF}Водный транспорт\t%s",
                (PlayerInfo[targetid][pLicenses][0] == 0)?("{f44122}Отсутствует"):("{89cc43}Действительна"),
                (PlayerInfo[targetid][pLicenses][1] == 0)?("{f44122}Отсутствует"):("{89cc43}Действительна"),
                (PlayerInfo[targetid][pLicenses][2] == 0)?("{f44122}Отсутствует"):("{89cc43}Действительна"));
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_TABLIST_HEADERS, "{2ac1fc}Лицензии", str, "Закрыть", "");
                format(str, sizeof(str), "%s[%d] принял Ваше предложение просмотреть лицензии.", GetName(playerid), playerid);
                SendClientMessage(targetid, COLOR_BLUE, str);
                GetPlayerPos(targetid, pos[0], pos[1], pos[2]);
                SetPlayerChatBubble(targetid, "показал(а) свои лицензии", COLOR_PURPLE, 15.0, 4000);
                format(str, sizeof(str), "%s показал%s свои лицензии %s", GetName(targetid), (PlayerInfo[targetid][pSex] == 0)?(""):("а"), GetName(playerid));
                IsPlayerNearCmd(15.0, str, COLOR_PURPLE, pos[0], pos[1], pos[2]);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_HEAL:{
                new targetid = pTemp[playerid][pTargetPlayer];
                SetHealth(playerid, 100.0);
                HospitalHeal(playerid);
                SendClientMessage(targetid, COLOR_BLUE, !"Пациент принял Ваше предложение и прошел курс лечения");
                TransferMoney(playerid, -1, GetPVarInt(playerid, "HospitaHeal:Amount"));
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_LIVE:{
                new targetid = pTemp[playerid][pTargetPlayer];
                SendClientMessage(targetid, COLOR_BLUE, !"Игрок принял Ваше предложение. Интервью начинается.");
                SendClientMessage(targetid, COLOR_INFO, !"Теперь Вы можете выйти в эфир с помощью команды /news. Игрок также сможет участвовать.");
                SendClientMessage(targetid, COLOR_INFO, !"Чтобы отключить игрока от эфира используйте команду /endlive [id игрока]");
                SendClientMessage(playerid, COLOR_BLUE, !"Вы успешно приняли предложение участвовать в интервью.");
                SendClientMessage(playerid, COLOR_INFO, !"Теперь Вы можете использовать команду /u, чтобы участвовать в обсуждении.");
                pTemp[playerid][pInLive] = 1;
                pTemp[targetid][pInLive] = 1;
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_SHOW_MED:{
                new targetid = pTemp[playerid][pTargetPlayer];
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetAction] = ACTION_NONE;
                SendClientMessage(targetid, COLOR_BLUE, !"Игрок принял Ваше предложение.");
                format(MSQ, sizeof(MSQ), "SELECT * FROM "MYSQL_MEDBOOK_TABLE" WHERE `owner` = '%s'", GetName(targetid));
                mysql_tquery(MYSQL_CON, MSQ, "@ShowMed", "ii", playerid, targetid);
                return true;
            }
            case ACTION_MEDCHECK_FULL:{
                new targetid = pTemp[playerid][pTargetPlayer];
                new Float:pos[3];
                format(str, sizeof(str), "%s начинает медицинский осмотр %s", GetName(targetid), GetName(playerid));
                GetPlayerPos(targetid, pos[0], pos[1], pos[2]);
                IsPlayerNearCmd(10.0, str, COLOR_PURPLE, pos[0], pos[1], pos[2]);
                SetTimerEx("CheckTemp", 1000, false, "ii", targetid, playerid);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_MEDCHECK_TEMP:{
                new targetid = pTemp[playerid][pTargetPlayer];
                RandomTemp(targetid, playerid);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_MEDCHECK_DAVL:{
                new targetid = pTemp[playerid][pTargetPlayer];
                RandomDavl(targetid, playerid);
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                return pTemp[playerid][pTargetAction] = ACTION_NONE;
            }
            case ACTION_GO_ROB:{
                new targetid = pTemp[playerid][pTargetPlayer];
                pTemp[playerid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
                pTemp[targetid][pTargetPlayer] = INVALID_PLAYER_ID;
                pTemp[playerid][pTargetAction] = ACTION_NONE;
                SetPVarInt(targetid, "Robbery:Partner", playerid);
                SetPVarInt(playerid, "Robbery:Partner", targetid);
                SendClientMessage(targetid, COLOR_INFO, !"Игрок принял Ваше предложение. Теперь отправляйтесь за машиной. Точка уже установлена на Вашем радаре.");
                SendClientMessage(playerid, COLOR_INFO, !"Вы приняли предложение. Теперь отправляйтесь за машиной. Точка уже установлена на Вашем радаре.");
                SetPlayerCheckpoint(playerid, 1914.1226, -1858.9080, 13.5610, 3.5);
                SetPlayerCheckpoint(targetid, 1914.1226, -1858.9080, 13.5610, 3.5);
                SetPVarInt(playerid, "Robbery:Stage", 1);
                SetPVarInt(targetid, "Robbery:Stage", 1);
                return 1;
            }
        }
        if(GetPVarInt(playerid, "Notify:SMS") == 1){
            SelectTextDraw(playerid, COLOR_LIGHTBLUE);
        }
    }
    if(newkeys & KEY_NO){ // N
        if((pTemp[playerid][pTargetAction] > ACTION_NONE && pTemp[playerid][pTargetAction] <= ACTION_GO_ROB)){
            new targetid = pTemp[playerid][pTargetPlayer];
            SendClientMessage(playerid, COLOR_ERROR, !"Вы отказались от предложения.");
            SendClientMessage(targetid, COLOR_ERROR, !"Игрок отказался от Вашего предложения.");
            pTemp[targetid][pSelectPlayer] = INVALID_PLAYER_ID;
            pTemp[playerid][pTargetPlayer] = INVALID_PLAYER_ID;
            pTemp[playerid][pTargetAction] = ACTION_NONE;
        }
        return 1;
    }
    if(newkeys == 2 && playerState == PLAYER_STATE_DRIVER){
        if(PlayerInfo[playerid][pJob] == JOB_AERO || PlayerInfo[playerid][pJob] == JOB_POST){
            if(postbarrier_status == 1) return SendClientMessage(playerid, COLOR_ERROR, !"Ошибка: Шлагбаум уже открыт, повторите попытку позже.");
            if(IsPlayerInRangeOfPoint(playerid, 8.0, 1071.80798, -1889.51404, 13.247)){
                MoveDynamicObject(postbarrier, 1071.80798, -1889.51404, 13.247, 0.1, 0.0, 0.0, 271.5);
                postbarrier_status = 1;
                SetTimer("postclose", 8000, 0);
                SendClientMessage(playerid, COLOR_LIME, !"Шлагбаум успешно открыт на 8 секунд.");
            }
        }
    }
    if(PRESSED(KEY_FIRE) || PRESSED(KEY_HANDBRAKE) || PRESSED(KEY_JUMP)){
        if(PlayerInfo[playerid][pJob] != JOB_NONE && IsPlayerAttachedObjectSlotUsed(playerid, 2) && FactoryInfo[playerid][FactoryStage] != 0){
            RemovePlayerAttachedObject(playerid, 2);
            RemovePlayerAttachedObject(playerid, 3);
            SendClientMessage(playerid, COLOR_RED, !"Вы сломали свою тележку. Пожалуйста, возьмите новую.");
            ClearAnimations(playerid);
            ApplyAnimation(playerid,"PED","IDLE_tired",4.1,1,0,0,0,2500);
            SetPlayerCheckpoint(playerid, -2149.0183, -234.4952, 36.5156, 2.0);
            return 1;
        }
        if(PlayerInfo[playerid][pJob] != JOB_NONE && IsPlayerAttachedObjectSlotUsed(playerid, 5) && GetPVarInt(playerid, "GruzStage") != 0){
            RemovePlayerAttachedObject(playerid, 5);
            SendClientMessage(playerid, COLOR_RED, !"Вы уронили груз из Ваших рук. Пожалуйста, возьмите новый.");
            ClearAnimations(playerid);
            ApplyAnimation(playerid,"PED","IDLE_tired",4.1,1,0,0,0,2500);
            SetPlayerCheckpoint(playerid, 1668.3042, 1089.5613, 10.8203, 2.0);
            SetPVarInt(playerid, "GruzStage", 1);
            return 1;
        }
    }
    if(playerState == PLAYER_STATE_ONFOOT && newkeys & KEY_SPRINT && newkeys & KEY_JUMP){
        new time = gettime();
        if(time > BunnyHopTime[playerid] && GetPlayerSpeed(playerid, true) >= MIN_BUNNYHOP_SPEED)
        {
            SetTimerEx("AntiBunnyHop", 1000, false, "i", playerid);
         }
        BunnyHopTime[playerid] = time;
    }
    if(newkeys & KEY_SPRINT && GetPVarInt(playerid, "enable_animation") == 1){
        ClearAnimations(playerid);
        SetPlayerSpecialAction(playerid, 0);
        ApplyAnimation(playerid,"PED","IDLE_tired",4.1,0,1,1,0,1);
        DeletePVar(playerid,"enable_animation");
        for(new g; g < 3; g++) TextDrawHideForPlayer(playerid, AnimationsTD[g]);
    }
    if(PlayerInfo[playerid][pJob] == JOB_FACTORY && FactoryInfo[playerid][FactoryStage] == 3 && IsPlayerInRangeOfPoint(playerid, 2.0, -2158.1956, -248.8193, 36.5156) || IsPlayerInRangeOfPoint(playerid, 2.0, -2159.8003, -248.8094, 36.5156) || IsPlayerInRangeOfPoint(playerid, 2.0, -2161.7151, -248.7964, 36.5156) || IsPlayerInRangeOfPoint(playerid, 2.0, -2164.0620, -248.7818, 36.5156)){
        if(newkeys == FactoryInfo[playerid][FactoryGameKey]  && FactoryInfo[playerid][FactoryStage] == 3){
            new amount = FactoryInfo[playerid][FactoryGameAmount];
            amount++;
            FactoryInfo[playerid][FactoryGameAmount] = amount;
            if(FactoryInfo[playerid][FactoryGameAmount] == 15 && FactoryInfo[playerid][FactoryStage] == 3){
                KillTimer(factorytimer[playerid]);
                TogglePlayerControllable(playerid, 1);
                FactoryInfo[playerid][FactoryStage] =  4;
                FactoryInfo[playerid][FactoryGameKey] = 0;
                FactoryInfo[playerid][FactoryGameAmount] = 0;
                SendClientMessage(playerid, COLOR_INFO, !" ");
                SendClientMessage(playerid, COLOR_INFO, !"Проверка товара окончена. Теперь направляйтесь в зону упаковки.");
                SetPlayerCheckpoint(playerid, -2147.1519, -250.5901, 36.5156, 2.0);
            } else {
                new str[26];
                format(str, sizeof(str), "%d", FactoryInfo[playerid][FactoryGameAmount]);
                strcat(str, "/15");
                GameTextForPlayer(playerid, str, 1500, 3);
            }
        }
    }
    if(PlayerInfo[playerid][pJob] == JOB_COM && ComInfo[playerid][ComStage] == 3){
        if(newkeys == ComInfo[playerid][ComGameKey] && PlayerInfo[playerid][pJob] == JOB_COM && ComInfo[playerid][ComStage] == 3){
            new amount = ComInfo[playerid][ComGameAmount];
            amount++;
            ComInfo[playerid][ComGameAmount] = amount;
            if(ComInfo[playerid][ComGameAmount] == 15 && ComInfo[playerid][ComStage] == 3){
                KillTimer(comtimer[playerid]);
                DestroyObject(comTreeO[playerid]);
                ClearAnimations(playerid);
                TogglePlayerControllable(playerid, 1);
                ComInfo[playerid][ComStage] =  4;
                ComInfo[playerid][ComGameKey] = 0;
                ComInfo[playerid][ComGameAmount] = 0;
                SendClientMessage(playerid, COLOR_INFO, !" ");
                SendClientMessage(playerid, COLOR_INFO, !"Отлично! Дерево срублено и успешно погружено на Ваше авто. Теперь отвезите его на склад.");
                comCarTree[playerid] = CreateDynamicObject(684,0.0,0.0,-1000.0,0.0,0.0,0.0,-1,-1,-1,300.0,300.0);
                AttachDynamicObjectToVehicle(comCarTree[playerid], GetPVarInt(playerid, "WorkCar"), 0.000, -1.759, 0.140, 0.000, 0.000, 0.000);
                Delete3DTextLabel(comTreeText[playerid]);
                DisablePlayerCheckpoint(playerid);
                SetPlayerCheckpoint(playerid, -2504.2849, 768.4606, 35.1719, 10);
            } else {
                new str[26];
                format(str, sizeof(str), "%d", ComInfo[playerid][ComGameAmount]);
                strcat(str, "/15");
                GameTextForPlayer(playerid, str, 1500, 3);
            }
            return 1;
        }
    }
    return 1;
}

Ссылка на исходный код на pastebin:

Обрабатывается только первое условие, остальные остаются без каких-либо действий. В чем может быть проблема? И как делать множественные проверки на одну кнопку более лучше и оптимизированнее? Спасибо!
 
Сверху Снизу