Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 22
  1. #1
    Аватар для DmX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Краснодар
    Сообщений
    292
    Репутация:
    23 ±

    Пишем команды с DmX [DC_CMD + SSCANF]

    Добрый день уважаемые обитатели Pro-Pawn.ru это мой второй урок посвященный pawn программированию, сегодня я буду учить вас писать команды на DC_CMD + SSCANF.

    DC_CMD - достаточно простой командный процессор в pawn программировании. Для меня он более удобный и интересный.

    Многие скачивая мод с командным процессором DC_CMD хватались за голову, так как не могли понять как с ним работать, а привыкли к RLS командам(тупому быдло коду).

    (!)Команды построены на проверках.

    Вот дана команда выдачи выдачи жизней:

    PHP код:
    CMD:sethp(playeridparams[])
    {
    new 
    str[24];
    if(
    sscanf(params,"ui",params[0],params[1])) return SendClientMessage(playeridCOLOR_WHITE,"Используйте: /sethp [id] [кол-во жизней]");
    if(
    params[1] < || params[1] > 100) return SendClientMessage(playeridCOLOR_GREY"Нельзя дать менее 0 и более 100 жизней.");
    SetHealth(params[0],params[1]);
    format(str,sizeof(str), "%s установил вам жизней %d",PlayerInfo[params[0]][pName],params[1]);
    SendClientMessage(params[0],COLOR_WHITEstr);
    return 
    true;

    Разберем подробнее код:

    PHP код:
    if(sscanf(params,"ui",params[0],params[1]))
    /* Это даем значения, если u - ид/имя игрока если i - число, и даем им значение params[0], params[1] все по порядку*/ 
    PHP код:
    SetHealth(params[0],params[1]);
    /*Опять же, params[0] - это ид игрока или имя которое мы ввели в команде, а params[1] это наше числовое значение i которое мы ввели когда прописывали команду.*/ 
    PHP код:
    if(params[1] < || params[1] > 100

    /*Это действие выводится когда вы ввели значение i - то есть params[1] меньше нуля либо больше 100*/ 
    PHP код:
    format(str,sizeof(str), "%s установил вам жизней %d",PlayerInfo[playerid][pName],params[1]);
    /* PlayerInfo[playerid][pName] где playerid - ид или имя игрока который прописал команду, params[1] - это опять же наше значение i 
    PHP код:
    SendClientMessage(params[0],COLOR_WHITEstr);
    /* Функция показывает сообщение в чат, а кому??? опять же params[0] ( то есть кому дали вы жизни - u ) 
    Код HTML:
    Табличка значений SSCANF:
    
    u - id или имя игрока
    I - целое число
    d - целое число
    s - строка
    f - число с плавающей точкой т.е. дробь

    P.S: Если указываете значение "s" указывайте его вот так "s[24]" то есть добавляйте стринг, так как у многих новичков с этим проблема, потом сервер выдает варнинги.

    Думаю все прекрасно и понятно написано. Специально для Pro-Pawn.ru

    Задавайте вопросы в теме.

    Автор: Siman aka DmX
    Последний раз редактировалось DmX; 16.03.2014 в 09:20.

  2. #2
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    ZCMD заменить на DC_CMD и урок будет конфеткой. :3

  3. #3
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    ZCMD заменить на DC_CMD и урок будет конфеткой. :3
    Пропаганда значит:D

  4. #4
    Аватар для DmX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Краснодар
    Сообщений
    292
    Репутация:
    23 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    ZCMD заменить на DC_CMD и урок будет конфеткой. :3
    Сделано :)

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,562
    Репутация:
    1972 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    ZCMD заменить на DC_CMD и урок будет конфеткой. :3
    Вот это уже отстой :с Всюду пропихиваете свой DC_CMD. Тут не форум пиара командного процессора, а форум помощи скриптерам. Всё же стоит каждому дать шанс на свой выбор :) Лучше уж в теме приписку сделал бы, что команды за DC_CMD и команды на ZCMD создаются подобным образом. Вот, например, как я стал в последнее время обрабатывать команды
    PHP код:
    public OnPlayerCommandText(playeridcmdtext[])
    {
        new 
    cmd[128], params[128], var[5][30];
        
    sscanf(cmdtext"s[128]s[128]"cmdparams);
        if(
    Command(cmd,"/pay") || Command(cmd,"/givecash") || Command(cmd,"/дать"))
        {
            if(
    sscanf(params,"dd", var[0][0],var[0][1])) return SendClientMessage(playerid0x00FF00FF"Помощьник: {FFFFFF}/pay <id> <сумма>");
            
    //Остальной код
            
    return 1;
        }

        else if(
    Command(cmd,"/pm") || Command(cmd,"/лс") || Command(cmd,"/личка"))
        {
            new 
    varstring[129];
                if(
    sscanf(params,"ds[128]", var[0][0],varstring)) return SendClientMessage(playerid0x00FF00FF"Помощьник: {FFFFFF}/pm <id> <сообщение>");
                
    //Остальной код
                
    return 1;
        }
        return 
    0;

    И код приятен глазу/лёгок в написании, и в скорости особо не теряю, ибо команд не так много использую. А если и буду терять, потери должны быть незаметными практически

    P.S. Command - макрос, упрощающий написание команды (strcmp заменяет)
    Последний раз редактировалось DeimoS; 11.02.2014 в 05:17.
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для semen7907
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.02.2014
    Сообщений
    34
    Репутация:
    0 ±
    А как сделать проверку на не существующего игрока?

    PHP код:
    CMD:sethp(playeridparams[])
    {
    new 
    str[24];
    if(
    sscanf(params,"ui",params[0],params[1])) return SendClientMessage(playeridCOLOR_WHITE,"Используйте: /sethp [id] [кол-во жизней]");
    if(
    params[1] < || params[1] > 100) return SendClientMessage(playeridCOLOR_GREY"Нельзя дать менее 0 и более 100 жизней.");
    SetHealth(params[0],params[1]);
    format(str,sizeof(str), "%s установил вам жизней %d",PlayerInfo[playerid][pName],params[1]);
    SendClientMessage(params[0],COLOR_WHITEstr);
    return 
    true

  7. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,562
    Репутация:
    1972 ±
    PHP код:
    if(!IsPlayerConnected(/*переменная, хранящая ID игрока*/)) return SendClientMessage(playerid0xFF0000FF"Такого игрока нет в сети"); 
    В твоём случае так
    PHP код:
    CMD:sethp(playeridparams[])
    {
        new 
    str[24];
        if(
    sscanf(params,"ui",params[0],params[1])) return SendClientMessage(playeridCOLOR_WHITE,"Используйте: /sethp [id] [кол-во жизней]");
        if(!
    IsPlayerConnected(params[0])) return SendClientMessage(playerid0xFF0000FF"Такого игрока нет в сети");
        if(
    params[1] < || params[1] > 100) return SendClientMessage(playeridCOLOR_GREY"Нельзя дать менее 0 и более 100 жизней.");
        
    SetHealth(params[0],params[1]);
        
    format(str,sizeof(str), "%s установил вам жизней %d",PlayerInfo[playerid][pName],params[1]);
        
    SendClientMessage(params[0],COLOR_WHITEstr);
        return 
    true;

    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #8
    Аватар для MR_BEN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Ребят, кто может объяснить разницу между i и d из таблицы значений SSCANF. Ведь, по сути, они обозначают целое число, тогда смысл их разделять?

  9. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,562
    Репутация:
    1972 ±
    Цитата Сообщение от MR_BEN Посмотреть сообщение
    Ребят, кто может объяснить разницу между i и d из таблицы значений SSCANF. Ведь, по сути, они обозначают целое число, тогда смысл их разделять?
    http://wiki.sa-mp.com/wiki/%D0%94%D1...3%D0%B0#format
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. #10
    Аватар для Skuba_Lo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.02.2014
    Сообщений
    13
    Репутация:
    2 ±
    PHP код:
    format(str,sizeof(str), "%s установил вам жизней %d",PlayerInfo[playerid][pName],params[1]);
    SendClientMessage(params[0],COLOR_WHITEstr); 
    Вот это сообщение выводится игроку которому дали хп, а как сделать чтобы сообщение еще и выводилось администратору который дал хп, например "Вы установили %такомуто игроку %столько то жизней"?

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

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

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

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

Ваши права

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