Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для MrJu[N]ior
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.02.2016
    Сообщений
    5
    Репутация:
    3 ±

    /goto | /gethere | /teleport | /tpall

    Здравствуйте, гости и пользователи портала pro-pawn.ru!
    Я пишу мод с нуля и дошёл до команд телепортации, сделал 4 удобные команды. Давайте рассмотрим их использование!:
     Использование команд

    PHP код:
    /goto [ID] - Телепортирует вас к игроку с указанным ID.
    /
    gethere [ID] - Телепортирует игрока с указанным ID к вам.
    /
    teleport [ID1] [ID2] - Телепортирует игрока с указанным ID1 к игроку с указанным ID2.
    /
    tpall Телепортирует всех игроков к вам 

    Мне лично достаточно и этих команд. Теперь сам код команд:
     Команды

     /goto

    PHP код:
    CMD:goto(playeridparams[])
    {
        if(!
    IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF, !"У вас недостаточно прав для выполнения данной команды!");
        if(
    isnull(params)) return SendClientMessage(playerid0xFF0000FF, !"Использование: /goto [ID] - телепортация к игроку.");
        if(
    isnums(params) == 0) return SendClientMessage(playerid0xFF0000FF, !"Введены должны быть только цифры!");
        new 
    Float:xFloat:yFloat:z,
            
    targetid strval(params),
            
    str[(34 1char] = !"Вы успешно телепортировались к ID ";
        
    GetPlayerPos(targetidxyz);
        
    SetPlayerPosFindZ(playerid2yz);
        
    SetPlayerInterior(playeridGetPlayerInterior(targetid));
        
    SetPlayerVirtualWorld(playeridGetPlayerVirtualWorld(targetid));
        
    strcat(strparams);
        return 
    SendClientMessage(playerid, -1str);


     /gethere

    PHP код:
    CMD:gethere(playeridparams[])
    {
        if(!
    IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF, !"У вас недостаточно прав для выполнения данной команды!"); // Меняем на свою проверку!
        
    if(isnull(params)) return SendClientMessage(playerid0xFF0000FF, !"Использование: /gethere [ID] - телепортация игрока к вам");
        if(
    isnums(params) == 0) return SendClientMessage(playerid0xFF0000FF, !"Введены должны быть только цифры!");
        new 
    Float:xFloat:yFloat:z,
            
    targetid strval(params),
            
    str[(37 1char] = !"Вы успешно телепортировали к себе ID ";
        
    GetPlayerPos(playeridxyz);
        
    SetPlayerPosFindZ(targetidx+2yz);
        
    SetPlayerInterior(targetidGetPlayerInterior(playerid));
        
    SetPlayerVirtualWorld(targetidGetPlayerVirtualWorld(playerid));
        
    strcat(strparams);
        return 
    SendClientMessage(playerid, -1str);


     /teleport

    PHP код:
    CMD:teleport(playeridparams[])
    {
        if(!
    IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF, !"У вас недостаточно прав для выполнения данной команды!"); // Меняем на свою проверку!
        
    new Float:xFloat:yFloat:z,
            
    tpidtargetidtpid_str[4 char], targetid_str[4 char],
            
    str[(30 6char] = !"Вы успешно телепортировали ID "// %d к ID %d
        
    if(sscanf(params"uu"tpidtargetid)) return SendClientMessage(playerid0xFF0000FF, !"Использование: /teleport [ID1] [ID2] - телепортация игрока к игроку");
        
    GetPlayerPos(targetidxyz);
        
    SetPlayerPosFindZ(tpidx+2yz);
        
    SetPlayerInterior(tpidGetPlayerInterior(targetid));
        
    SetPlayerVirtualWorld(tpidGetPlayerVirtualWorld(targetid));
        
    valstr(tpid_strtpid);
        
    valstr(targetid_strtargetid);
        
    strcat(strtpid_str);
        
    strcat(str" к ID ");
        
    strcat(strtargetid_str);
        return 
    SendClientMessage(playerid, -1str);


     /tpall

    PHP код:
    CMD:tpall(playerid)
    {
        if(!
    IsPlayerAdmin(playerid)) return SendClientMessage(playerid0xFF0000FF, !"У вас недостаточно прав для выполнения данной команды!"); // Меняем на свою проверку!
        
    new Float:xFloat:yFloat:z;
        
    GetPlayerPos(playeridxyz);
        foreach(new 
    iPlayer)
        {
            
    SetPlayerPosFindZ(ix+2y0.0);
            
    SetPlayerInterior(iGetPlayerInterior(playerid));
            
    SetPlayerVirtualWorld(iGetPlayerVirtualWorld(playerid));
        }
        return 
    SendClientMessage(playerid, -1, !"Вы телепортировали к себе всех игроков");



    Итак, обратим внимание на команды, все они однотипны и телепорт идёт на одни и те-же координаты (x+2). Конечно были возможны баги в начальных командах где использовался SetPlayerPos, если игрок к которому идёт телепорт возле горы то возможность телепортироватся в гору есть, для этого была произведена замена на SetPlayerPosFindZ. Так-же заметим что команда /tpall телепортирует всех игроков на одну точку. По идеи багов быть не должно, игрокам достаточно прыгнуть для выхода из 'ловушки'.
    PHP код:
    И не забудем что в каждой команде есть проверка на 'админку'Это строка 'if(IsPlayerAdmin(playerid)) ....'заменяйте на свою или оставляйте проверку на 'RCON-Админку'
    После обновления (30-го июня) - в командах /goto и /gethere используется функция isnums, без неё код не работает и возможны баги. Внесите это ко всем stock:
     stock isnums

    PHP код:
    isnums(const string[])
    {
        for(new 
    istrlen(string); ji++)
        {
            if(!(
    '0' <= string[i] <= '9')) return 0;
        }
        return 
    1;


    Просьба: кто найдёт ошибку, баг, опечатку, недоработку и подобное - напишите в тему, так-же оставляйте своё мнение о командах!

    На этом у меня всё.
    Автор: MrJunior aka .:MrJu[N]ior:.
    Последний раз редактировалось MrJu[N]ior; 30.06.2016 в 15:46. Причина: Обновил. (Четвертый пост)

  2. #2
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

  3. #3
    Аватар для MrJu[N]ior
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.02.2016
    Сообщений
    5
    Репутация:
    3 ±
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Причём здесь команды эти команды? Вы выдали ссылку на тему ДК где он показал команды узнавание своих координат, и их установка? Если хотите указать на что-то в этой теме - делайте как во второй ссылке. По её поводу - поправил.

  4. #4
    Аватар для MrJu[N]ior
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.02.2016
    Сообщений
    5
    Репутация:
    3 ±
    Перевёл всё на strcat + valstr(для скорости).
    Запаковал всё(ибо формат больше не используется).
    Убрал возможность некоторых багов.

  5. Пользователь сказал cпасибо:
    seriu (01.07.2016)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •