Заложник своей машины =) -
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
#define MAX_CARS 2000 // С новыми версиями са-мп'а увеличивай на максимальное кол-во транспорта.
|
Вообще то есть такая константа MAX_VEHICLES и изменять ее с каждым новым релизом сампа будут сами разработчики.
Quote:
Originally Posted by Vamp!r
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
Вообще то есть такая константа 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
так лучше но всё равно анимка проскальзывает чутка =)