Закрыть Привет! Если вы читаете это - Вы еще не зарегистрированы. Это займет не больше минуты. Нажмите здесь, чтобы пройти регистрацию в несколько простых шагов, чтобы пользоваться всеми возможностями нашего форума. Обратите внимание, запрещены непристойные, матерные, бессмысленные (цифры, случайный набор букв) ники. Удачи!

Тема: Ииспользованию strtok

Показано с 1 по 10 из 27

  1. #1
    Пользователь

    Аватар для Andreq

    Статус: Оффлайн
    Регистрация:11.11.2010
    Сообщений:46
    Репутация:20 [+/-] 

    Хорошо Ииспользованию strtok

    strtok это функция, используемая чтобы определить пробел между командой и параметром. Вам кажется сложным отличать параметры от команды? Этот урок должен вам помочь.
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    tmp[255], string[255], cmd[255], idxgiveplayeridsendernamegiveplayer;
        
    cmd strtok(cmdtextidx);
        
    GetPlayerName(playeridsendernamesizeof(sendername));
        if(
    strcmp(cmd"/akill"true) == 0)
        {
            if(!
    IsPlayerAdmin(playerid)) return SendClientMessage(playerid0x919191FF"Вы должны быть администратором чтобы использовать эту комманду.");
            
    tmp strtok(cmdtextidx);
            if(!
    strlen(tmp)) return SendClientMessage(playerid0x919191FF"Использование: \"/akill [ID]\"");
            
    giveplayerid strval(tmp);
            
    GetPlayerName(giveplayeridgiveplayersizeof(giveplayer));
            if(!
    IsPlayerConnected(giveplayerid))SendClientMessage(playerid0x919191FF"Игрок с данным ID не подключён.");
            
    SetPlayerHealth(giveplayerid0); 
            
    format(stringsizeof(string), "Админ %s[%i] убвл вас!"sendernameplayerid);
            
    SendClientMessage(giveplayerid0xE21D2CFFstring);
            
    format(stringsizeof(string), "Вы убили %s[%i]!"giveplayergiveplayerid);
            
    SendClientMessage(playerid0xE21D2CFFstring);
            return 
    1;
       }

    Обьяснение
    PHP код:
    giveplayerid strval(tmp); 
    Присвоение переменной 'giveplayerid', числовое значение 'tmp'.
    PHP код:
    if(!strlen(tmp)) return SendClientMessage(...); 
    Если 'giveplayerid' не был указан (То есть было написано /akill вместо /akill ID)
    PHP код:
    GetPlayerName(playeridsendernamesizeof(sendername));
    GetPlayerName(giveplayeridgiveplayersizeof(giveplayer)); 
    Чтобы вывести правильное сообщение (т.е: "Nickname1(ID:4) убил Nickname2(ID:2)") мы должны извлечь два никнейма в 2 переменные. P.S.: Извлекайте никнейм у 'giveplayerid' ПОСЛЕ того как вы связали его с 'tmp'.

    Все равно не очень понятно? Просмотрите это:
    PHP код:
    if(strcmp(cmd"/ban"true) == 0)
    {
        if(!
    IsPlayerAdmin(playerid)) 
        return 
    SendClientMessage(playerid0x919191FF"Вы не админ."); // проверка на админа
        
    tmp strtok(cmdtextidx); // Мы объявляем что мы используем strtok для переменной 'tmp'
        
    if(!strlen(tmp)) return SendClientMessage(playerid0x919191FF"Использование: /ban [id]"); // Если ID не был указан
        
    giveplayerid strval(tmp); // Связываем с переменной 'giveplayerid'
        
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid0x919191FF"Игрок с данным ID не подключен."); // если 'giveplayerid' не онлайн
        
    Ban(giveplayerid);
        return 
    1;

    Объяснение
    PHP код:
    if(!IsPlayerAdmin(playerid)) 
    Если игрок не RCON админ, вывод сообщения, и остановка процесса
    PHP код:
    tmp strtok(cmdtextidx); 
    Связываем strtok с 'tmp'
    PHP код:
    if(!strlen(tmp)) 
    Если параметр не был задан, вывод сообщения, и остановка процесса
    PHP код:
    giveplayerid strval(tmp); 
    Связываем 'giveplayerid' с числовым значением tmp
    PHP код:
    if(!IsPlayerConnected(giveplayerid)) 
    Если 'giveplayerid' не подключён, вывод сообщения, и остановка процесса
    PHP код:
    Ban(giveplayerid); 
    Конечный результат команды, каждому понятен. :)

    Переводил на русский язык MazaHACKa
    Урок взят из Википедии http://wiki.sa-mp.com
    Последний раз редактировалось Red_Ronnie; 10.08.2011 в 20:42.
  2. 9 пользователей сказали cпасибо Andreq за это полезное сообщение:

    Andrey_Kiryuhin (31.03.2011), Diman4ik (03.04.2011), Justin (07.01.2011), krik (01.12.2010), Саня210 (06.01.2011), Samuel_Myasniko (19.03.2011), Sergey (08.03.2011), [D]em[O]n (02.02.2011), __oFFmaN :3 (27.01.2013)

  3. #2
    Пользователь

    Аватар для Саня210

    Статус: Оффлайн
    Регистрация:24.12.2010
    Сообщений:204
    Репутация:19 [+/-] 
    Сообщение удалено.
    Последний раз редактировалось Саня210; 21.05.2013 в 23:42.
    Услуги скриптера (написание простых / сложных систем, исправление багов, помощь).
    Skype: sancheus210 (причина авторизации: "Нужна помощь pawn").
  4. #3
    Заблокирован

    Аватар для Geshan

    Статус: Оффлайн
    Регистрация:27.01.2011
    Сообщений:5
    Репутация:0 [+/-] 
    Спасибо
  5. #4
    Пользователь

    Аватар для [D]em[O]n

    Статус: Оффлайн
    Регистрация:02.02.2011
    Сообщений:186
    Репутация:6 [+/-] 
    Полезный урок для новичков,держи +
  6. #5
    Пользователь

    Аватар для Alfred_Nobel

    Статус: Оффлайн
    Регистрация:06.02.2011
    Адрес:Тирасполь
    Сообщений:141
    Репутация:7 [+/-] 
    норм урок!
  7. #6
    Пользователь

    Аватар для Scripter

    Статус: Оффлайн
    Регистрация:18.03.2011
    Адрес:Тюмень
    Сообщений:34
    Репутация:0 [+/-] 
    Хороший урок
  8. #7
    Пользователь

    Аватар для CycJluk

    Статус: Оффлайн
    Регистрация:23.03.2011
    Сообщений:56
    Репутация:0 [+/-] 
    Авторо красав)
  9. #8
    Заблокирован

    Аватар для Last

    Статус: Оффлайн
    Регистрация:28.03.2011
    Адрес:Челябинск
    Сообщений:992
    Репутация:376 [+/-] 
    Привет ,помогите мне я только начал изучать pawno и хотел написать команду : /otp id эта команда была отправляла игрока с нужынм id'ом на определенную позицию
    if(strcmp(cmdtext, "/otp", true, 10) == 0)
    {
    if(!IsPlayerAdmin(playerid))
    giveplayerid = strval(tmp);
    SetPlayerPos(giveplayerid, 2574.30, -2410.89, 22.49 );
    }
    else
    {
    SendClientMessage(playerid, 0xFF000099, "Вы не админ");
    }
  10. #9
    Пользователь

    Аватар для Mr. Oscar

    Статус: Оффлайн
    Регистрация:21.03.2011
    Адрес:Иркутск
    Сообщений:433
    Репутация:65 [+/-] 
    так попробуй
    PHP код:
        if(strcmp(cmd"/otp"true10) == 0)
        {
            if(!
    IsPlayerAdmin(playerid))
            {
                
    SendClientMessage(playeridCOLOR_GRAD1"Ты не админ ***а поганая");
                return 
    1;
            }
             if(
    IsPlayerConnected(playerid))
             {
                
    tmp strtok(cmdtextidx);
                if(!
    strlen(tmp))
                {
                    
    SendClientMessage(playeridCOLOR_GRAD1" Подсказка: /otp [IDигрока]");
                    return 
    1;
                }
                
    giveplayerid strval(tmp);
                
    SetPlayerPos(giveplayerid2574.30, -2410.8922.49 );
            }
            return 
    1;
        } 
    если же помог + не зажопь
  11. #10
    Заблокирован

    Аватар для Last

    Статус: Оффлайн
    Регистрация:28.03.2011
    Адрес:Челябинск
    Сообщений:992
    Репутация:376 [+/-] 
    Неполучается(
    PHP код:
    еrror 017undefined symbol "cmd"
     
    error 017undefined symbol "strtok"
     
    error 033: array must be indexed (variable "tmp"
Страница 1 из 3 123 Последняя
  • К странице:

Ваши права

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