Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 3
    Гостей: 2
    Пользователи: - отсутствуют
    Роботы: crawl Bot

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 30-11-2011, 00:48 Просмотров: 9385

    Урок 2. Символы (текст) и работа с текстом (ответ на вопрос что такое %s)

    Что такое символы?

    Наверное все знают что компьютеры работают только с цифрами 1 и 0, текст не исключение.
    Не буду вас грузить всеми нюансами, так как и сам если честно не до конца осведомлен что там и как работает, если вам все же очень интересно, то с легкостью сможете найти сами достаточное количество информации по этой теме.

    Исходя из выше сказанного можно сделать вывод что каждая строка, на самом деле набор цифр, символы представлены в ASCII кодировке, она представляет каждый символ своим числом, диапазон чисел от 0 до 255, сюда входят и прописные и заглавные буквы латинского алфавита, обратите внимание что большие и маленькие буквы - не одно и тоже. Видимо уже созрел вопрос, зачем 255 если в алфавите 26 букв плюс 26 заглавных, получается на много меньше чем 255, все правильно в эту кодировку входят еще и другие символы, но о них мы не будем сейчас говорить.

    ASCII кодировка и какое число за какую букву отвечает:
    • A-Z диапозон 65-90. 65 = 'A' и 90 = 'Z'.
    • a-z диапозон 97-122. 97 = 'a' и 122 = 'z'.

    Заметили разницу между большими и маленькими буквами?

    Каждая строка обязана заканчиваться символом 0.
    То есть если в строке найдено пустое значение это конец строки.
    По этому все массивы должны иметь на не 1 размера больше чем текст.
    test - 4 символа, а массив под это слово должен иметь размер 5, 1 ячейку для последнего пустого символа.

    Запись строк в массив

    Предположим мы хотим поместить имя игрока в массив, допустим имя будет Kotelov, в нем 7 символов, значит необходим массив с размерностью 8
    new StringPlayerName[] = "Kotelov"

    При создании нового массива и записи в него слова, размер массива указывать не нужно, компилятор сделает это сам!

    Создание двумерных массивов

    Допустим нам необходимо запомнить все имена игроков на сервере.
    Для этого нам понадобится массив, который бы запомнил связку айди игрока с его именем.
    Выглядит это так:
    Представим что у нас 3 игрока на сервере с именами Nick1 Nick2 Nick3 и их айди 1 2 3

    //Объявление двумерного массива
    new PlayersName[32][] //32 максимальное количество игроков на сервере, второй массив оставляем без размера

    //Заполнение двумерного массива
    PlayersName[0][] = "Nick1"
    PlayersName[1][] = "Nick2"
    PlayersName[2][] = "Nick3"

    Что бы нам получить имя игрока с айди 1, нам необходимо обратиться к массиву следующий образом:

    get_user_name(PlayersName[1],name,32)


    Объявление массива и его заполнение:
    new PlayersName[][]= {"Nick1","Nick2","Nick3"}


    Что такое %s и как вывести содержание массива в сообщение

    Что бы подставить массив из букв в сообщение игроку, необходимо использовать символ подстановки %s

    Пример:

    //Объявление нового массива под имя
    new name[32]
    //Получение имени игрока и запись в массив
    get_user_name(id,name,31)
    //вывод сообщения с именем игрока
    client_print(id,print_chat,"Player name: %s",name)


    Внутри кавычек "тело" сообщения "Player name: %s".
    Оно не меняется, кроме %s, в это место подставляется массив name.
    обратите внимание - подставляется без указания индекса, так как во всем массиве храниться всего лишь имя одного игрока.

    Что бы подставить несколько массивов или переменных, нужно ставить все последовательно.
    Пример:

    //Объявление нового массива под имя
    new name[32]
    //Получение имени игрока и запись в массив
    get_user_name(id,name,31)
    //вывод сообщения с именем игрока и его id
    client_print(id,print_chat,"Player name: %s he id: %d",name,id)


    "Player name: %s he id: %d" - Сообщение
    ,name,id - массивы и переменные для подстановки.

    Видите как в сообщение расположены символы для подстановки и как они идут за сообщением?
    В одинаковом порядке, то есть:
    client_print(id,print_chat,"Подставляемое значение1 , Подставляемое значение2", массив1,переменная2)

    Этот пример для понятия и работать он не будет, так как переменная и массив написаны на русском.

    Надеюсь понятно все рассказал.
    На этом все.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    bestnamebest

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Спасибо! smile
    GAARA54

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Кто-нибудь может объяснить ?
    Всё время задавался тупым вопросом:

    //Получение имени игрока и запись в массив
    get_user_name(id,name,31)


    Почему изначально размер массива равен максимальному кол-ву игроков на сервере, тоисть 32, а в функции получении имени пишеться 31 ?
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  56  +

    Как бы так не заумно объяснить...
    В общем последний символ должен быть пустым, что бы подстраховаться и не занять последний символ именем игрока, мы и не даем в него записать ничего.
    То есть всего 32 ячейки для символов, но тридцать вторую не даем записывать.
    Только на самом деле 33 ячейки, а записываем максимум 32, так как нумерация начинается с 0, а не как мы привыкли с единицы.
    --------------------
    GAARA54

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Спасибо )
    и вот ещё вопрос
    из урока №4
    Вот кусок кода:

        new ip[17]
        get_user_ip(id,ip,16,1)


    размер массива 17
    ид игрока с его ип + 16 уже = 17
    на кой здесь ещё число 1 в конце ?)
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  56  +

    123.123.123.123
    это 15 символов + 1 пустой = 16
    лично мне видимо было лень считать сколько там точно символов, вот и промахнулся на единицу.
    А в обще, посмотрел бы синтаксис функции и все бы сам понял.
    В преть не стоит смешивать комментарии разных статей.
    --------------------
    lailador

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Не подскажите мне вот одну штуку:

    new PlayersName[32][]


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

    new PlayersName[33][]


    Если не так то я запутался =(
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  56  +

    lailador, делай для 32 игроков 33.
    Если не лень, поищи в комментариях, уже это обсуждалось.
    --------------------
    TpaBka

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Admin, а разве массив начинается не с 0 ? Я всегда подставляю 32 и ошибок не наблюдал.
    Admin

    30.07.2011
    ICQ: 980500
    Публикаций: 507
    Комментариев: 333
    Репутация: -  56  +

    Я же сказал - смотрите более ранние комментарии:

    Нужно делать 33.
    id 1 = mas[0]
    id 2 = mas[1]
    id 32 = mas[31]

    Это всё обычные присвоения, а если id взять в качестве индекса, то 32 вылезет за пределы.([32] => 0-31, 32 не влезет, [33] => 0-32
    --------------------
    hummer

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Драсте. Я конечно благодарен что хоть кто то пишет статьи по скриптингу amx mod x на русском, ну уж если взялись писать статьи так писать их нужно на понятном языке и расписывать всё подробно.
    Из прочитанного во многих местах хочется задавать вопросы.

    "Что бы нам получить имя игрока с айди 1, нам необходимо обратиться к массиву следующий образом:" Эмм... а де 1 айди? выше чёт упоминалось про айди 1,2,3 но в массиве только 0,1,2 как понимать?

    "get_user_name(PlayersName[1],name,32)" [1] - это айди, понятно. А зачем 32 и name ?

    Я привёл только два примера. Короче, что я хотел сказать, стать просто космос для того кто хочет научиться писать плагины для amx mod x. Здесь нет применения теории на практики, нет описания общего принципа работы плагина, есть лишь отдельные фрагменты кодов, с которым новичку делать нечего.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама