_Edik_ |
Дата: Пятница, 31.10.2014, 20:23 | Сообщение # 1
|
Боец
Сообщений: 58
Статус: Offline
|
Доброе время суток с вами опять я _Edik_ и мы продолжаем наш урок. Итак вторая часть Функций public и stock. Ссылка на первый урок *Тык* Как говориться поехали. Теперь скомпилируем мод и запустим сервер. И в консоли мы увидим текст «Hello, world». Итак, переделаем наш пример и создадим функцию Say с параметром. Назовем этот параметр string. Мы будем передавать в функцию строку. Строка – это массив, поэтому к имени параметра приписываем справа пустые квадратные скобки, как показано на примере ниже: Код public Say(string[]) { return print(string); } Теперь, чтобы вызвать функцию, и передать тот же текст в консоль, пишем следующее: Код SayHello("Cheat master!"); Так как тело функции состоит из одной строки, эту функцию можно уместить в одну строку, как показано на примере ниже. Но, если функция будет состоять более чем из 1 строки, то фигурные скобки придется вернуть. Код public Say(string[]) return print(string); Если мы хотим передать какое-либо число в функцию, мы пишем просто имя параметра, если вещественное число, то приписываем к имени параметра, впереди приставку Float:, если логическое, то приставка bool:, в общем, все как у переменных: Код forward Number(Float:value); // Если в функцию будет передаваться вещественное число forward Number(bool:value); // Если в функцию будет передаваться логическое значение true или false forward Number(value); // Если в функцию передает обычное число STOCK Создавать функцию через stock гораздо удобнее, так как это аналогичная функция, за исключением того, что ее не нужно объявлять через forward и ее желательно использовать, если за функцией не закреплен таймер. Ну и напоследок, функции создаются для того, чтобы не повторять часто используемые фрагменты кода при выполнении скрипта в разных местах. Гораздо удобнее поместить код в функцию и вызывать из любого места. А если этот код нужно переделать, тогда это существенный плюс функции, так как не приходится переделывать код в разных местах, когда он есть уже в функции. Код stock Say(string[]) { return print(string); } И напоследок, наверняка просматривая стандартные функции в инклуде a_player.inc вы увидели такую в некоторых функциях перед именем параметра стоит символ – «&». Если мы передаем в функцию переменную, то передается не сама функция, а ее копия. По выполнению задачи функция не изменяет значение переменной, которую мы передали в функцию. Рассмотрим отличие такого способа передачи параметров. Код new value = 1234; stock nvalue(val) { val += 246; printf("%d",val); return 1; } У нас есть простейшая функция и у нас есть переменная, давайте вызовем ее в функции OnGameModeInit, чтобы посмотреть результат в консоли сервера. Но сначала, скопируйте строку 5 Продолжение следует ждём следующего урока. А с вами был _Edik_ Всем пока.
+
|
|
|
|
Fake{yl] |
Дата: Пятница, 31.10.2014, 20:47 | Сообщение # 2
|
Боец
Сообщений: 107
Статус: Offline
|
Снова здравствуйте =)
1 - Код SayHello("Cheat master!"); Сразу же выдаст Error. Ибо функцию создал - Say, а не SayHello (+ она уже занята :|) 2 - Цитата Но, если функция будет состоять более чем из 1 строки, то фигурные скобки придется вернуть. Опять же не верное рассуждение. Если я так написал (Может у вас это было на опыте), то можно спокойно уместить Код stock Balalayka(ololo[]) { format(string, 128, "%s играет на балалайке", ololo); SendCllientMessageForAll(-1, string); }
В
Код stock Balalayka(ololo[]) format(string, 128, "%s играет на балалайке", ololo), SendCllientMessageForAll(-1, string); P.S. Вместо ';' (Точки с запятой) после комманды'format', нужно просто поставить ',' (Запятую), вот и все.
Иииии
Код new value = 1234; stock nvalue(val) { val += 246; printf("%d",val); return 1; } В этом случае будет выводить 246, а не 1480, как бы тебе хотелось =) Коллбек еще вызвать надо то =)
после
Вроде бы все, в текст не вчитывался =)
ушел, не вернусь <_<
|
|
|
|