Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Задний салон для фургонов - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ FS ][ All ]
Задний салон для фургонов Copy Evolve RP
Оценка: ***** 1 Голосов

#11
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияMavi (10 ноября 2020 - 22:34) писал:


На пассажирское сиденье, да, но только если сел именно в задние сиденья. Чувак, который сядет рядом с шофером, его не трогаю.

А второе условие...

else if(PlayerVehicleID[playerid] > 0 && GetPlayerInterior(playerid) != COMPARTMENT_INT_ID)


Это для водителя и пассажира с переднего салона, которые если вдруг выйдут из машины (ведь их надо будет удалить из итератора). newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_PASSENGER не катит, потому что если делать так, то такое условие так же сработает, когда я тпну игрока из задних сидений в инту, а мне нужно затронуть только водителя и переднего пассажира.


Это всё здорово, но повторяю - сейчас твой код срабатывает вообще во всех случаях: и когда игрок спавнится, и когда игрок переходит в режим слежки, и когда игрок умирает. Именно поэтому я тебе и предлагаю добавить проверки, при которых всякие переменные и прочие проверки из твоего кода будут срабатывать только для тех состояний, для которых они предназначены.
Суть тех условий, которые я предлагаю добавить, не в том, чтоб какие-то из твоих проверок заменить ими, а в том, чтоб твой код не срабатывал всякий вызов OnPlayerStateChange. Сам по себе код, при этом, не изменится. Просто добавится проверка, которая будет отсекать твой код от лишних срабатываний.

UPD: В общем, я имею ввиду подобный код

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    switch(newstate)
    {
        case PLAYER_STATE_PASSENGER, PLAYER_STATE_DRIVER:
        {
            new vehicleid = GetPlayerVehicleID(playerid);
            if(vehicleid > 0)
            {
                new model = GetVehicleModel(vehicleid);
                if(IsModelTruck(model))
                {
                    if(GetPlayerVehicleSeat(playerid) >= REAR_SEAT_ID)
                    {
                        switch(model)
                        {
                            case CAR_ENFORCER:
                            {
                                SetPlayerPos(playerid, InteriorPositions[0][0], InteriorPositions[0][1], InteriorPositions[0][2]);
                            }
                            case CAR_AMBULANCE:
                            {
                                SetPlayerPos(playerid, InteriorPositions[1][0], InteriorPositions[1][1], InteriorPositions[1][2]);
                            }
                            default: 
                            {
                                SetPlayerPos(playerid, InteriorPositions[2][0], InteriorPositions[2][1], InteriorPositions[2][2]);
                            }
                        }
                        SetPlayerInterior(playerid, COMPARTMENT_INT_ID);
                        SetPlayerVirtualWorld(playerid, vehicleid);
                        SetPlayerFacingAngle(playerid, 180.00);
                        SetCameraBehindPlayer(playerid);
                    }
                    PlayerVehicleID[playerid] = vehicleid;
                    Iter_Add(TruckPassengers[vehicleid], playerid);
                    SendClientMessage(playerid, COLOR_GREY, VEHICLE_ENTER_MSG);
                    return 1;
                }
            }
        }
        default:
        {
            switch(oldstate)
            {
                case PLAYER_STATE_PASSENGER, PLAYER_STATE_DRIVER:
                {
                    if(PlayerVehicleID[playerid] > 0 && GetPlayerInterior(playerid) != COMPARTMENT_INT_ID) 
                    {
                        Iter_Remove(TruckPassengers[PlayerVehicleID[playerid]], playerid);
                        PlayerVehicleID[playerid] = 0;
                    }
                }
            }
        }
    }
    return 1;
}




Ну и да: лучше сделай названия глобальных переменных более уникальными. Ибо если кто-то решит твой код вставить в мод или реализовать его в виде инклуда - у него могут начаться проблемы с совпадением имён.

Сообщение отредактировал DeimoS: 11 ноября 2020 - 11:39

0

#12
Пользователь офлайн   Egor Sifon 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Оригинальная система
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика