PDA

Просмотр полной версии : [Вопрос] По команде /tv(режим наблюдения за игроками)



BadPawn
16.01.2016, 11:22
Привет всем. Пишу мод с 0(new.pwn). И дошел до момента, когда сильно нуждаюсь в наблюдении за игроками, но совсем не понимаю, из чего это все состоит, так же не знаю стандартных функций для реализации наблюдения.

Если есть у кого самый простой вариант, только для открытия наблюдения, выложите пожалуйста.
Если же нет, расскажите, что и как действует в ней, и я напишу сам. Пересматривал коды многих этой команды, но там такой бред, что я ни черта не понял.
Помогите, пожалуйста.

Все, что имею на данный момент :DD:


if(Command("/tv")) // режим наблюдения за игроками
{
if(GetPVarInt(playerid, "Admin") < 1) return 1;
if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, cwhite, "***Используйте: /tv [ID/Имя_Фамилия]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, cgrey, "**Отсутствует на сервере.");
if(GetPVarInt(params[0], "Login") == 0) return SendClientMessage(playerid, cgrey, "**Не авторизирован.");
return 1;
}

Роуди.
16.01.2016, 11:50
if(Command("/tv")) // режим наблюдения за игроками
{
if(GetPVarInt(playerid, "Admin") < 1) return 1;
if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, cwhite, "***Используйте: /tv [ID/Имя_Фамилия]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, cgrey, "**Отсутствует на сервере.");
if(GetPVarInt(params[0], "Login") == 0) return SendClientMessage(playerid, cgrey, "**Не авторизирован.");

TogglePlayerSpectating(params[0], 1) // погружает плеера в спек
PlayerSpectatePlayer(playerid, params[]); // устанавливает спек на определенного игрока
SetPlayerVirtualWorld(playerid, GetPlayerVitualWorld(params[0])); // устанавливает виртуальный мира игрока, за которого следим.
SetPlayerInterior(playerid, GetPlayerInterior(params[0]));
return 1;
}

BadPawn
16.01.2016, 14:07
спс) +

A N D R E Y
16.01.2016, 15:21
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, cgrey, "**Отсутствует на сервере.");
А вы знали, что если игрока нет на сервере комманда и так не сработает? Зачем эта проверка тут нужна?

VVWVV
16.01.2016, 15:45
Можно использовать возвращаемое значение функции TogglePlayerSpectating, которое возвращает число 0, если такого идентификатора игрока нет на сервере (это так же можно назвать оптимизацией, т.к. мы уменьшаем количество вызываемых функции).

Вариант команды:

if(Command("/tv"))
if (GetPVarInt(playerid, "Admin") <= 0)
return 1;
new targetid;
if (sscanf(params, "u", targetid)) // Также можно использовать массив.
return SendClientMessage(playerid, -1,
// Упакованная строка занимает меньше памяти: в одной ячейки помещаются
// сразу несколько значений.
!"*** Используйте: /tv [ID/Имя_Фамилия]");
// Решил их объединить, т.к. несут одну и ту же информацию для администратора.
if (GetPVarInt(targetid, "Login") == 0
|| TogglePlayerControllable(targetid, 1) == 0)
return SendClientMessage(playerid, cgrey, !"** Не авторизирован.");
PlayerSpectatePlayer(playerid, targetid);
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(targetid));
SetPlayerInterior(playerid, GetPlayerInterior(targetid));
return 1;
}

P.S.: Аббревиатура tv означает — телевизор (Телевиденье). Не кажется ли вам, что это не много путает администратора. ИМХО, лучше изменить название данной команды, например, sp(ectate).

UPD: Нашёл для вас интересный урок (http://pro-pawn.ru/showthread.php?11975-%D0%A1%D0%BB%D0%B5%D0%B6%D0%BA%D0%B0-%D0%B7%D0%B0-%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%BC-(-spectate)), как раз по вашей теме.

Daniel_Cortez
16.01.2016, 17:14
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, cgrey, "**Отсутствует на сервере.");
А вы знали, что если игрока нет на сервере комманда и так не сработает? Зачем эта проверка тут нужна?
Чтобы выдать сообщение об отсутствии игрока, если он не подключен, а не сфейлиться втихаря (или вывести какое-то левое сообщение).

vovandolg
17.01.2016, 00:06
P.S.: Аббревиатура tv означает — телевизор (Телевиденье). Не кажется ли вам, что это не много путает администратора. ИМХО, лучше изменить название данной команды, например, sp(ectate).


/sp(awn) :smile:

BadPawn
17.01.2016, 09:52
всем спасибо ребят за помощь. приятно, когда нуждаешься в помощи и помогают. начал разбираться и писать код. команды готовы, идем дальше. )

в ответ всем вам, ставлю всем +, и выложу готовую систему слежения(если ее можно назвать системой) своими руками, но с помощью инфы, которую вы мне дали.

P.S> Единственный портал на котором реально откровенная помощь, если не знают пользователи, то помогают администраторы.
P.S2> На других порталах такого не встречал.

Всем спасибо друзья. )

Иван Бубнов
17.01.2016, 10:40
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, cgrey, "**Отсутствует на сервере.");
А вы знали, что если игрока нет на сервере комманда и так не сработает? Зачем эта проверка тут нужна?

Логический сработает.