Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама



**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22
  1. #1
    Аватар для DmX
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2013
    Адрес
    Краснодар
    Сообщений
    277
    Репутация:
    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
    Аватар для Londlem
    Модератор

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

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

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

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

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,168
    Репутация:
    1274 ±
    Цитата Сообщение от 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.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    04.02.2014
    Сообщений
    16
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,168
    Репутация:
    1274 ±
    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;

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

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

    Steve Pavlina

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

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

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

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

    Широко известно, что идеи стоят 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 123 ПоследняяПоследняя

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

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

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

Ваши права

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