[Урок 2] Функции public и stock часть[2/3] - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Урок 2] Функции public и stock часть[2/3]
_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, как бы тебе хотелось =) Коллбек еще вызвать надо то =)

Код
nvalue(value);
после
Код
new value = 1234;


Вроде бы все, в текст не вчитывался =)


ушел, не вернусь <_<
  • Страница 1 из 1
  • 1
Поиск: