Заложник в машине =)
#1

Как сделать так чтобы игрок не мог выйти из машины? Водитель! Я делал проверку на кнопку, он выходит потом его запихивает назад и так же с проверкой в тачке ли игрок на таймере, а то, что он вылезает не айс =( Подскажите чтонибуль пожалуйста =)
Reply
#2

Разве что только заморозить его..
TogglePlayerControllable(playerid, 0); // заложник обездвижен
TogglePlayerControllable(playerid, 1); // имеет возможность контролировать себя

https://sampwiki.blast.hk/wiki/TogglePlayerControllable
Reply
#3

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

offtop: как удалять свои посты? oO
Reply
#4

нет заморозка не подходит я же говорю если игрок аодитель, т.е. мне надо ездить =D
Reply
#5

ооооуу, я чёто подумал что тебе пассажира надо, не увидел)) тогда поставь проверку на выход из тачки (id = KEY_ACTION вроде), после чего поставь проверку на то что после нажатия кнопки вышел он или всё же остался в транспорте (иногда просто так не вылетишь на ходу/в полёте), а потом запихни его обратно (если всё же он вышел из тачки).. больше никаких вариантов нету.. хотя может и есть но самп еще не дал долгожданных функций которые бы облегчили всё написания кода
Reply
#6

зачем обрабатывать нажатия кнопок, когда есть https://sampwiki.blast.hk/wiki/OnPlayerStateChange
кстати
4 Player exits a vehicle
5 Player enters a vehicle as driver
6 Player enters a vehicle as passenger

только, я почему то не уверен что они будут в OnPlayerStateChange, скорее всего их надо получать с помощью GetPlayerState
Reply
#7

Сделать можно. Я делал это при сдаче на прова, чтобы игрок во время движения случайно не вышел из тачки, иначе урок провален.

Но хотелось бы услышать другие идеи.

Maccer дерзай
Quote:

4 Player exits a vehicle
5 Player enters a vehicle as driver
6 Player enters a vehicle as passenger

вдруг познаешь что-то интересное. Я вроде ни где не использую эти состояния. Эти состояния не ловятся при выходе или посадке в тачку. Я сам не знаю для чего они.

Есть ещё GetPlayerSpecialAction(playerid)
там есть ещё такие спец. действия
3 - SPECIAL_ACTION_ENTER_VEHICLE * - Detect if the player is entering a vehicle via an animation.
4 - SPECIAL_ACTION_EXIT_VEHICLE * - Detect if the player is exiting a vehicle via an animation.
Reply
#8

Актуально...
Reply
#9

Всё просто.
В начало мода:
Code:
#define MAX_CARS 2000 // С новыми версиями са-мп'а увеличивай на максимальное кол-во транспорта.
Что-то вроде такого:
В OnPlayerKeyStateChange:
Code:
if((newkeys & KEY_SECONDARY_ATTACK) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
    SendClientMessage(playerid,0xB4B5B7FF,"Вы не можете выйти из автомобиля, т.к. вы заложник!");
    for(new i=0; i<MAX_CARS; i++) {
    GetPlayerVehicleID(i)
    if(CheckPlayerDistanceToVehicle(5, playerid, i)) {
    PutPlayerInVehicle(playerid, i, 0); break; }
    }
}
В конец мода:
Code:
stock CheckPlayerDistanceToVehicle(Float:radi, playerid, vehicleid)
{
	if(IsPlayerConnected(playerid))
	{
	    new Float:PX,Float:PY,Float:PZ,Float:X,Float:Y,Float:Z;
	    GetPlayerPos(playerid,PX,PY,PZ);
	    GetVehiclePos(vehicleid, X,Y,Z);
	    new Float:Distance = (X-PX)*(X-PX)+(Y-PY)*(Y-PY)+(Z-PZ)*(Z-PZ);
	    if(Distance <= radi*radi)
	    {
	        return 1;
	    }
	}
	return 0;
}
Не знаю, будет ли пахать, но по сути должно Не проверял, сам проверь.
И еще) Тут будет работать, всегда, вставь свою проверку на заложник игрок или нет.
Reply
#10

Quote:
Originally Posted by Vamp!r
View Post
#define MAX_CARS 2000 // С новыми версиями са-мп'а увеличивай на максимальное кол-во транспорта.
Вообще то есть такая константа MAX_VEHICLES и изменять ее с каждым новым релизом сампа будут сами разработчики.
Quote:
Originally Posted by Vamp!r
View Post
for(new i=0; i<MAX_CARS; i++) {
GetPlayerVehicleID(i)
if(CheckPlayerDistanceToVehicle(5, playerid, i)) {
PutPlayerInVehicle(playerid, i, 0); break; }
}
}
если i счетчик машин, то почему ты ее подставляешь в GetPlayerVehicleID и куда вообще сохраняешь возвращаемое ей значение, можешь пояснить?
Reply
#11

Quote:
Originally Posted by Maccer
View Post
Вообще то есть такая константа MAX_VEHICLES и изменять ее с каждым новым релизом сампа будут сами разработчики.
Хм, насчёт MAX_VEHICLES не знал Всегда использовал собственную.
Quote:

если i счетчик машин, то почему ты ее подставляешь в GetPlayerVehicleID и куда вообще сохраняешь возвращаемое ей значение, можешь пояснить?

Подставляю в GetPlayerVehicleID, чтобы узнать, какой автомобиль находится рядом с игроком. После нахождения этого транспорта, который рядом, я сажаю игрока в его и останавливаю цикл, чтобы не было ненужных обработок и перекидывания в другой транспорт.
Кстате я тут подумал и значение 5 будет за много, примерно 1, чтобы не садило в другую тачку.
Reply
#12

https://sampwiki.blast.hk/wiki/GetPlayerVehicleID посмотри на досуге
1) в функцию надо передавать id игрока, а не машины
2) с возвращаемым ею значением нужно что-то делать, иначе в вызове нет смысла
Reply
#13

Ступил Т.к. не пользуясь ничем написал это в сообщение.
Изменил немного, за ночь пришли мысли.

В OnPlayerKeyStateChange:
Code:
if((newkeys & KEY_SECONDARY_ATTACK) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
    if(GetPlayerSpecialAction(playerid)==4)
    {
        new veh = GetPlayerVehicleID(playerid);
        SendClientMessage(playerid,0xB4B5B7FF,"Вы не можете выйти из автомобиля, т.к. вы заложник!");
        PutPlayerInVehicle(playerid, veh, 0);
    }
}
Так же можно использовать в OnPlayerExitVehicle:
Code:
if(Твоя проверка на заложника)
{
    new veh = GetPlayerVehicleID(playerid);
    SendClientMessage(playerid,0xB4B5B7FF,"Вы не можете выйти из автомобиля, т.к. вы заложник!");
    PutPlayerInVehicle(playerid, veh, 0);
}
Reply
#14

Всё равно выполняется анимация выхода, наверное этого неизбежать =(
Reply
#15

может быть это из-за "чудо" синхронизации ?
Reply
#16

а если поробовать при вызове колбэка смены статуса возвращать 0??
никто так не пробовал?
Reply
#17

неа, нефига...
Reply
#18

да че тут думать. Я так понял у тебя есть какая-то переменная которая обозначает заложник игрок или нет. ну вот и пляши от сюда. Пихай в начало OnPlayerStateChange проверку. если у игрока переменая заложника равна например 1 то сразу выполнить PutPlayerInVehicle(playerid,GetPlayerVehicleID(pla yerid),1); вместо последнего параметра "1" ставь тот который надо
Code:
0 - Driver
1 - Front Passenger
2 - Back left passenger
3 - Back right passenger
4+ - Passenger seats (coach etc.)
А чтобы узнать водилой был игрок или пассажиром, то сделай еще и проверку с помощью GetPlayerState
Зайди на мой сервак и глянь как там менты возят преступников в тюрягу, вот это по тому же принципу сделано, преступник не может выйти пока его в участок не привезут и пока он не окажется в тюряге , проблем никогда не было.
.
Чтобы быстрей срабатывало можешь еще выполнить ClearAnimations в начале проверки на заложника
Reply
#19

хм, я как не делал всё равно анимка выполняется
Reply
#20

так лучше но всё равно анимка проскальзывает чутка =)
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)