Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Вопрос по переменным...

Статус пользователя hacker63
сообщение 2.4.2014, 13:54
Сообщение #1


Стаж: 13 лет

Сообщений: 368
Благодарностей: 42
Полезность: < 0

Друзья знакомлюсь с языком программирования. Есть некий код плагина, который выводит HUD сообщение с вашим именем в середине экрана:
Код:
/* Мой первый плагин */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Padr1no"


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /name","user_name")
// Add your code here...
}
public user_name(id){
new user_name[32]
get_user_name(id, user_name,31)

set_hudmessage(0, 255, 0, -1.0,0.25,0,6.0,12.0)
show_hudmessage(id,"Your username: %s",user_name)
}

Конкретно мне интересен вот какой момент в данной части:
Код
    new user_name[32]

Почему в уроке ставят размерность массива 32?
Тоесть резервируется ячейка под ник игрока. А в случае, когда на сервере 32 игркока будет заняты 31 ячейка+32-ая для закрытия кода
Верно?

Затем...
Код
    get_user_name(id, user_name,31)

Я понимаю что 31 берется по формату:
Код
get_user_name ( index, name[], len )

Или тут такая же картина как и с user_name[32] ?? (Резервируются ячейки под 32 игрока)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
trollface
сообщение 2.4.2014, 14:06
Сообщение #2
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

hacker63, юзайте так:
Код:
get_user_name(id, user_name,charsmax(user_name))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 2.4.2014, 14:07
Сообщение #3


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Цитата(hacker63 @ 2.4.2014, 13:54) *
Друзья знакомлюсь с языком программирования. Есть некий код плагина, который выводит HUD сообщение с вашим именем в середине экрана:
Код:
/* Мой первый плагин */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Padr1no"


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /name","user_name")
// Add your code here...
}
public user_name(id){
new user_name[32]
get_user_name(id, user_name,31)

set_hudmessage(0, 255, 0, -1.0,0.25,0,6.0,12.0)
show_hudmessage(id,"Your username: %s",user_name)
}

Конкретно мне интересен вот какой момент в данной части:
Код
    new user_name[32]

Почему в уроке ставят размерность массива 32?
Тоесть резервируется ячейка под ник игрока. А в случае, когда на сервере 32 игркока будет заняты 31 ячейка+32-ая для закрытия кода
Верно?

Затем...
Код
    get_user_name(id, user_name,31)

Я понимаю что 31 берется по формату:
Код
get_user_name ( index, name[], len )

Или тут такая же картина как и с user_name[32] ?? (Резервируются ячейки под 32 игрока)


ячеек всего 33 в массиве (от 0 до 32)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя hacker63
сообщение 2.4.2014, 14:10
Сообщение #4


Стаж: 13 лет

Сообщений: 368
Благодарностей: 42
Полезность: < 0

Цитата(trollface @ 2.4.2014, 15:06) *
hacker63, юзайте так:
Код:
get_user_name(id, user_name,charsmax(user_name))

Как обьяснить данную переменную?
charsmax(user_name)

p.s может быть типо: Задаем массив равный кол-ву символов в user_name?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 2.4.2014, 14:12
Сообщение #5


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Цитата(hacker63 @ 2.4.2014, 14:10) *
Как обьяснить данную переменную?
charsmax(user_name)

p.s может быть типо: Задаем массив равный кол-ву символов в user_name?


charsmax задает размер всего массива

в данном случае эта ф-ия задаст размер всего массива user_name

Отредактировал: GOOD FELLOW, - 2.4.2014, 14:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя hacker63
сообщение 2.4.2014, 14:14
Сообщение #6


Стаж: 13 лет

Сообщений: 368
Благодарностей: 42
Полезность: < 0

Цитата(GOOD FELLOW @ 2.4.2014, 15:12) *
charsmax задает размер всего массива

в данном случае эта ф-ия задаст размер всего массива user_name

Благодарен откликнувшимся!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 2.4.2014, 14:33
Сообщение #7
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Потому что макс кол-во байтов в нике 32.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Surf
сообщение 2.4.2014, 14:43
Сообщение #8


Стаж: 14 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Код:
user_name[32]

Переменная (точнее массив) размерностью 32 элемента. Т.к движок КС ограничивает длину ника в 32 символа, мы берем именно 32 элемента (1 элемент = 1 символ в нике игрока).

Код:
get_user_name ( index, name[], len )

Функция получение ника игрока с индексом "index", записывает ник в переменную "name" размерностью "len".

Код:
sizeof(user_name)
получение размерности массива, в нашем случае = 32

Код:
charsmax(user_name)

оно же Код:
#define charsmax(%1) (sizeof(%1)-1)


получаем размерность массива -1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Surf
сообщение 2.4.2014, 14:49
Сообщение #9


Стаж: 14 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Цитата(GOOD FELLOW @ 2.4.2014, 18:07) *
ячеек всего 33 в массиве (от 0 до 32)

ячеек всего 32 в массиве, от 0 до 31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.4.2014, 14:55
Сообщение #10


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Код
1 элемент = 1 символ в нике игрока

не совсем верно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 2.4.2014, 15:22
Сообщение #11


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(Legenda @ 2.4.2014, 14:55) *
Код
1 элемент = 1 символ в нике игрока

не совсем верно

Если брать латиницу


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: