Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    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
    Сообщений
    106
    Репутация:
    8 ±
    Смотрите может у вас есть античит на подмену диалогов, как вариант может перехватится функция. Как вариант еще можно проверить через лог, поставить перед print("1"); и после вызова диалога print("2");

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

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Эмм, ну добавь проверку на INVALID_PLAYER_ID, раз возвращаешь её
    PHP код:
    new id GetVehicleSeat(vehid0);
    if(
    id == INVALID_PLAYER_ID) return 1;
    if(
    PlayerInfo[id][pJob] == JOB_TAXI
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

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

 

 

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

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

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

Ваши права

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