_wS_
|
Дата: Вторник, 06.03.2012, 22:53:26 | Сообщение # 1 |
|
Функции часто используют для того, чтобы не повторять один и тот же код много раз в скрипте. Функция может быть вызвана только из другой функции и делается это так: my_func(arg1, arg2, ..., arg32);
my_func - имя самой функции, должно быть уникальным. В скобках различные параметры, которые вы можете передать, если это нужно. В SourceMod есть "допустимый" предел параметров: 32. Вы можете вызвать функцию и без них, например просто my_func();
Код #include <sourcemod>
public OnPluginStart() { my_func(); }
my_func() { LogMessage("Скрипт включен"); }
Функция может что-то возвращать, например число, умноженное на 3:
Код #include <sourcemod>
public OnPluginStart() { new x = my_func(2); PrintToServer("x = %d", x); }
my_func(Num) { return Num * 3; }
Num - это имя параметра, которое может быть каким угодно. Сами его придумывайте, главное чтобы было ясно, что это такое. Вот еще пример, проверяем есть ли на сервере главный админ:
Код #include <sourcemod>
public OnPluginStart() { new bool:xz_var = check_full_admin(); if (xz_var) PrintToChatAll("На сервере есть главный админ"); else PrintToChatAll("Главного админа нет");
// Но можно было не создавать переменную xz_var, а просто сделать так: if (check_full_admin()) PrintToChatAll("На сервере есть главный админ"); else PrintToChatAll("Главного админа нет"); }
bool:check_full_admin() { for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && GetUserFlagBits(i) & ADMFLAG_ROOT) { // Админ найден, возвращаем true (правда) return true; } } // Админ не найден, возвращаем false (ложь) return false; }
Если функция встречает команду return, то весь код в этой функции, который находится ниже команды return, будет проигнорирован и функция завершит свою работу. Если функция должна вернуть true или false, то перед ее именем нужно добавить bool:. Если возвращает строку, String:, если Handle, то Handle:, еще есть Float: и тд. Т.е. это зависит от того, что функция должна вернуть. Эти приставки нужно добавлять и перед параметрами в скобках.
Код #include <sourcemod>
public OnPluginStart() { new Float:x = 1.2; new Float:y = 2.1; PrintToServer("%.1f + %.1f = %.1f", x, y, sum_float(x, y)); }
Float:sum_float(Float:x, Float:y) { return x + y; }
|
|
| |