SA-MP Forums Archive
Заложник в машине =) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Заложник в машине =) (/showthread.php?tid=176806)



Заложник своей машины =) - lost13 - 14.09.2010

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


Re: Заложник в машине =) - Radius - 14.09.2010

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

https://sampwiki.blast.hk/wiki/TogglePlayerControllable


Re: Заложник в машине =) - Radius - 14.09.2010

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

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


Re: Заложник в машине =) - lost13 - 14.09.2010

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


Re: Заложник в машине =) - Radius - 14.09.2010

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


Re: Заложник в машине =) - Maccer - 14.09.2010

зачем обрабатывать нажатия кнопок, когда есть 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


Re: Заложник в машине =) - DANGER1979 - 15.09.2010

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

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

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.


Re: Заложник в машине =) - lost13 - 16.09.2010

Актуально...


Re: Заложник в машине =) - Vamp!r - 17.09.2010

Всё просто.
В начало мода:
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;
}
Не знаю, будет ли пахать, но по сути должно Не проверял, сам проверь.
И еще) Тут будет работать, всегда, вставь свою проверку на заложник игрок или нет.


Re: Заложник в машине =) - Maccer - 17.09.2010

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 и куда вообще сохраняешь возвращаемое ей значение, можешь пояснить?


Re: Заложник в машине =) - Vamp!r - 17.09.2010

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

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

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


Re: Заложник в машине =) - Maccer - 17.09.2010

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


Re: Заложник в машине =) - Vamp!r - 18.09.2010

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

В 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);
}



Re: Заложник в машине =) - lost13 - 20.09.2010

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


Re: Заложник в машине =) - [CripZ]SERCH - 20.09.2010

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


Re: Заложник в машине =) - Aleks10 - 21.09.2010

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


Re: Заложник в машине =) - lost13 - 21.09.2010

неа, нефига...


Re: Заложник в машине =) - [RUS]max - 23.09.2010

да че тут думать. Я так понял у тебя есть какая-то переменная которая обозначает заложник игрок или нет. ну вот и пляши от сюда. Пихай в начало 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 в начале проверки на заложника


Re: Заложник в машине =) - lost13 - 24.09.2010

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


Re: Заложник в машине =) - lost13 - 24.09.2010

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