Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама



**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Показано с 1 по 5 из 5
  1. #1
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    57
    Репутация:
    0 ±

    Не показывается диалог для id 0

    Не показывается диалог вот этот (для игрока с id 0)а для id больше 0 все работает
    Код:
    ShowPlayerDialog(playerid, dtaximesto, 2, "Как ехать?", "1. Выбрать пункт в GPS\n2. Отметить точку на карте\n3. Договориться с таксистом", "Выбор", "Отмена");
    Код:
    new vehid = GetPlayerVehicleID(playerid);
    if(newstate == PLAYER_STATE_PASSENGER)
    {
        new string[45];
        new seat = GetPlayerVehicleSeat(playerid);
        if(PlayerCar[playerid] != INVALID_VEHICLE_ID) VehicleSeat[PlayerCar[playerid]][PlayerSeat[playerid]] = -1;
        VehicleSeat[vehid][seat] = playerid;
        PlayerCar[playerid] = vehid;
        PlayerSeat[playerid] = seat;
        SetCameraBehindPlayer(playerid);
        if(IsATaxi(vehid))
        {
            new id = GetVehicleSeat(vehid, 0);
            if(PlayerInfo[id][pJob] == JOB_TAXI)
            {
                if(TaxiTarif[id] > 0)
                {
                    Taxi_GO[playerid] = 0;
                    TaxiPrice[playerid] = 0;
                    TaxiDistance[playerid] = 0;
                    PlayerTextDrawShow(playerid,TaxiDraw[playerid]);
                    for(new x; x < 10; x++) TextDrawShowForPlayer(playerid, TaxiTD[x]);
                    PlayerTextDrawSetString(playerid, TaxiDraw[playerid],"0");
                    format(string,sizeof(string),">> {FFFFFF}%s сел к вам в такси.",Name(playerid));
                    SendClientMessage(id,COLOR_WHITE,string);
                    if(PlayerInfo[playerid][pCash]<=TaxiTarif[id])
                    {
                        SendClientMessage(id,COLOR_RED,"[ВНИМАНИЕ]{FFFFFF} У игрока который к вам сел , не хватит денег чтобы оплатить за проезд!");
                        SendClientMessage(playerid,COLOR_RED,"<< {FFFFFF}У вас не достаточно денег чтобы ездить на такси!");
                        RemovePlayerFromVehicle(playerid);
                    }
                    ShowPlayerDialog(playerid, dtaximesto, 2, "Как ехать?", "1. Выбрать пункт в GPS\n2. Отметить точку на карте\n3. Договориться с таксистом", "Выбор", "Отмена");
                }
                else
                {
                    SendClientMessage(id,COLOR_RED,"[Информация] {FFFFFF}К вам в такси сел пассажир, но вы не получите с него прибыли, так-как вы не установили тариф!");
                    SendClientMessage(playerid,COLOR_RED,"[Информация] {FFFFFF}Этот таксист еще не установил тариф за свои услуги!");
                }
            }
        }
    }
    if(oldstate == 2 || oldstate == PLAYER_STATE_PASSENGER)
    {
        new string[100];
        new vehicleid = PlayerCar[playerid];
        //new seat = PlayerSeat[playerid];
        if(IsATaxi(vehicleid))
        {
            if(!PlayerSeat[playerid])
            {
                if(PlayerInfo[playerid][pJob] == JOB_TAXI)
                {
                    if(TaxiTarif[playerid] > 0)
                    {
                        TaxiTarif[playerid] = 0;
                        SendClientMessage(playerid,COLOR_GREY,"[Информация] {FFFFFF}Вы теперь не на службе");
                        PlayerTextDrawHide(playerid,TaxiDraw[playerid]);
                       
                        for(new x; x < 10; x++) TextDrawHideForPlayer(playerid,TaxiTD[x]);
                        UpdateDynamic3DTextLabelText(TaxiText[vehicleid], COLOR_GOLD, "<< Такси для аренды >>");
                        for(new i;i < 4;i ++)
                        {
                            new player = GetVehicleSeat(vehicleid, i);
                            if(!IsPlayerConnected(player)) continue;
                            if(player != INVALID_PLAYER_ID)
                            {
                                SendClientMessage(player,COLOR_GREY,"[Информация] {FFFFFF}Таксист, который вез вас теперь не на службе");
                                PlayerTextDrawHide(player,TaxiDraw[player]);
                                for(new x; x < 10; x++) TextDrawHideForPlayer(playerid,TaxiTD[x]);
                                if(PlayerInfo[player][pCash] > TaxiPrice[player]) GiveMoney(playerid,TaxiPrice[player],"Taxi+");
                                GiveMoney(player,-TaxiPrice[player],"Taxi-");
                
                                PlayerTextDrawHide(player,TaxiDraw[player]);
                                PlayerTextDrawSetString(playerid, TaxiDraw[playerid],"0");
                                PlayerTextDrawSetString(player, TaxiDraw[player],"0");
                                TaxiPrice[player] = 0;
                                TaxiDistance[player] = 0;
                            }
                        }
                    }
                }
            }
            else if(PlayerSeat[playerid] > 0)
            {
                new id = GetVehicleSeat(vehicleid, 0);
                if(id != INVALID_PLAYER_ID)
                {
                    if(PlayerInfo[playerid][pCash] > TaxiPrice[playerid]) 	GiveMoney(playerid,-TaxiPrice[playerid]);
                    GiveMoney(id,TaxiPrice[playerid]);
                    PlayerTextDrawHide(playerid,TaxiDraw[playerid]);
                    for(new x; x < 10; x++) TextDrawHideForPlayer(playerid,TaxiTD[x]);
                    PlayerTextDrawSetString(playerid, TaxiDraw[playerid],"0");
                    format(string,sizeof(string),"[Информация] {FFFFFF}Вы взяли $%d с игрока %s за поездку",TaxiPrice[playerid],Name(playerid));
                    SendClientMessage(id,COLOR_WHITE,string);
                    format(string,sizeof(string),"[Информация] {FFFFFF}Вы отдали $%d таксисту %s за поездку",TaxiPrice[playerid],Name(id));
                    SendClientMessage(playerid,COLOR_GREY,string);
                    TaxiPrice[playerid]=0;
                    new money;
                    for(new i = 1; i < 4; i ++)
                    {
                        new pseat = GetVehicleSeat(vehicleid, i);
                        if(pseat != INVALID_PLAYER_ID) money += TaxiPrice[pseat];
                    }
                    format(string,sizeof(string),"%d",money);
                    PlayerTextDrawSetString(id, TaxiDraw[id],string);
                }
            }
        }
    }
    VehicleSeatState и GetVehicleSeat
    Код:
    stock VehicleSeatState(seat)
    {
        new seatstate;
        switch(seat)
        {
            case 0: seatstate = 2;
            default: seatstate = PLAYER_STATE_PASSENGER;
        }
        return seatstate;
    }
    stock GetVehicleSeat(vehicleid, seatid)
    {
        new playerid = VehicleSeat[vehicleid][seatid];
        if(IsPlayerInVehicle(playerid, vehicleid))
        {
            if(GetPlayerState(playerid) == VehicleSeatState(seatid))
            {
                return playerid;
            }
        }
        VehicleSeat[vehicleid][seatid] = INVALID_PLAYER_ID;
        return VehicleSeat[vehicleid][seatid];
    }
    Код:
    stock IsATaxi(carid)
    {
        switch(GetVehicleModel(carid))
        {
            case 420,438: return true;
        }
        return carid;
    }

  2. #2
    Аватар для vasyok28
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2015
    Сообщений
    71
    Репутация:
    6 ±
    Смотрите может у вас есть античит на подмену диалогов, как вариант может перехватится функция. Как вариант еще можно проверить через лог, поставить перед print("1"); и после вызова диалога print("2");

  3. #3
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    57
    Репутация:
    0 ±
    Диалог стал работать вроде как)
    но теперь когда сажусь в машину выходит это

    debug жалуется на строчку 28673
    Код:
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Accessing element at index 65535 past array upper bound 149
    [debug] AMX backtrace:
    [debug] #0 001907d0 in public OnPlayerStateChange (playerid=0, newstate=3, oldstate=1) at E:\test\gamemodes\test.pwn:28673
    Код:
    new id = GetVehicleSeat(vehid, 0);
    if(PlayerInfo[id][pJob] == JOB_TAXI)//строчка 28673
    Код:
    stock GetVehicleSeat(vehicleid, seatid)
    {
        new playerid = VehicleSeat[vehicleid][seatid];
        if(IsPlayerInVehicle(playerid, vehicleid))
        {
            if(GetPlayerState(playerid) == VehicleSeatState(seatid))
            {
                return playerid;
            }
        }
        VehicleSeat[vehicleid][seatid] = INVALID_PLAYER_ID;
        return VehicleSeat[vehicleid][seatid];
    }
    Последний раз редактировалось Vasya_Pupkin; 22.09.2016 в 17:39.

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,356
    Репутация:
    1338 ±
    Эмм, ну добавь проверку на INVALID_PLAYER_ID, раз возвращаешь её
    PHP код:
    new id GetVehicleSeat(vehid0);
    if(
    id == INVALID_PLAYER_ID) return 1;
    if(
    PlayerInfo[id][pJob] == JOB_TAXI
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Vasya_Pupkin (22.09.2016)
  6. #5
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    57
    Репутация:
    0 ±
    спс все работает)
    можно закрывать.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •