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

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

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

[ Pawn ]
Закрытие дверей у личного авто

#1
Пользователь офлайн   Barsow 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Я облазил много статей и не как не могу понять, как сделать что бы человек из вне мог открыть авто. С открытием авто изнутри ошибок не возникло. Но вот если человек с наружи хочет открыть, ничего не получается. Вот код
CMD:lock(playerid, vehicleid)
{
	new Float: x, Float:y, Float: z;
	new car = GetPlayerVehicleID(playerid);
	new Text3D:status_car_close, Text3D:status_car_open;
	new engine, lights, alarm, doors, bonnet, boot, objective;
	GetVehiclePos(vehicleid, x, y, z);
	GetPlayerPos(playerid, x, y, z);
	if(!IsPlayerInRangeOfPoint(playerid, 10.0, x, y, z)) return SCM(playerid, 0x808080AA,"[Ошибка] Вы должны быть рядом со своей машиной!");
	if(car == car_my[0][playerid] || car == car_my[1][playerid] || car == car_my[2][playerid] || car == car_my[3][playerid]){
		GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
		if(doors == 0){
			SetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, true, bonnet, boot, objective);
			caren[GetPlayerVehicleID(playerid)] = 1;
			SCM(playerid, 0x0080FFAA, "[Информация]{FFFFFF} Транспорт успешно закрыт!");
			Delete3DTextLabel(Text3D:status_car_open);
			status_car_close = Create3DTextLabel("[Закрыто]",0xFF8000AA,0,0,0, 25.0 , 0, 1);
			Attach3DTextLabelToVehicle(status_car_close, GetPlayerVehicleID(playerid), 0,0,0);
   		}
	    else{
			SetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, false, bonnet, boot, objective);
			caren[GetPlayerVehicleID(playerid)] = 0;
			SCM(playerid, 0x0080FFAA, "[Информация]{FFFFFF} Транспорт успешно открыт!");
			Delete3DTextLabel(Text3D:status_car_close);
			status_car_open = Create3DTextLabel("[Открыто]",0xFF8000AA,0,0,0, 25.0 , 0, 1);
			Attach3DTextLabelToVehicle(status_car_open, GetPlayerVehicleID(playerid), 0,0,0);
   		}
	}
	else SCM(playerid, 0x808080AA,"[Ошибка] Это не ваш транспорт!");
	return 1;
}



car_my[0][playerid], car_my[1][playerid]... Это ид авто.
Прошу обьяснить каким способом можно это сделать, и если всё же через цыкл (что скорее всего). Помочь мне вынести текст за цыкл. Заранее спасибо :rolleyes:

Сообщение отредактировал Barsow: 15 мая 2021 - 15:26

0

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

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Циклом перебираешь весь транспорт на сервере, получаешь его координаты через GetPlayerVehicle и смотришь, достаточно ли оно близко от игрока. Если достаточно - работаешь с ним.
0

#3
Пользователь офлайн   Barsow 

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

Просмотр сообщенияDeimoS (15 мая 2021 - 15:55) писал:

Циклом перебираешь весь транспорт на сервере, получаешь его координаты через GetPlayerVehicle и смотришь, достаточно ли оно близко от игрока. Если достаточно - работаешь с ним.


я так и дела. В итоге у меня в чат просто милион раз выводило что тс открыт, а когда я пытался туда сесть. Оказывалось что тс закрыт и сесть в него нельзя
0

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

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Ну так цикл нужно останавливать после того, как нашёл нужное авто.

CMD:lock(playerid)
{
    switch(GetPlayerState(playerid))
    {
        case PLAYER_STATE_DRIVER:
        {
            new vehicleid = GetPlayerVehicleID(playerid);

            if(!IsPlayerVehicleOwner(playerid, vehicleid))
            {
                SendClientMessage(playerid, -1, "Это не Ваш транспорт!");
                return 1;
            }

            // Открываешь/закрываешь транспорт с ID = vehicleid
        }
        case PLAYER_STATE_ONFOOT:
        {
            new Float:x;
            new Float:y;
            new Float:z;
            for(new v = 1; v < MAX_VEHICLES; v++)
            {
                if(!GetVehiclePos(v, x, y, z))
                    continue;
                if(!IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z))
                    continue;

                if(!IsPlayerVehicleOwner(playerid, v))
                {
                    SendClientMessage(playerid, -1, "Это не Ваш транспорт!");
                    return 1;
                }

                // Открываешь/закрываешь транспорт с ID = v
                return 1;
            }
        }
    }
    return 1;
}


stock IsPlayerVehicleOwner(playerid, vehicleid)
{
    for(new i; i < sizeof(car_my); i++)
    {
        if(car_my[i][playerid] == vehicleid)
            return 1;
    }
    return 0;
}

Сообщение отредактировал DeimoS: 15 мая 2021 - 16:18

1

#5
Пользователь офлайн   Barsow 

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

Просмотр сообщенияDeimoS (15 мая 2021 - 16:09) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Спасибо. Это я так понял оно будет перебирать 1000 авто каждый раз? или только те, которые на даный момент на сервере?
0

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

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Эмм, он будет делать 1000 итераций, каждый раз проверяя, существует ли транспорт и если существует - получать его координаты для дальнейшей проверки.
0

#7
Пользователь офлайн   Barsow 

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

Просмотр сообщенияDeimoS (15 мая 2021 - 16:18) писал:

Эмм, он будет делать 1000 итераций, каждый раз проверяя, существует ли транспорт и если существует - получать его координаты для дальнейшей проверки.

Понял, спасибо :rolleyes:
0

#8
Пользователь офлайн   Pozitivchik 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияBarsow (15 мая 2021 - 16:24) писал:

Понял, спасибо :rolleyes:


Помогло?
0

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


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

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


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