| выдыхай | Offline Дата: Суббота, 03.08.2013, 10:28 | Сообщение # 1 |
![выдыхай]()
Постов: 64 |
 |
| Как Создать Плагин для Sourcemod (урок 1)
У вас уже должен быть установлен sourcemod Исходники плагинов лежат в addons/sourcemod/scripting (.sp). Скомпилированные (файлы .smx): В addons/sourcemod/plugins
Чтобы плагин работал, достаточно файла .smx (если нет желания делиться исходным кодом). Основные RCON команды: Код sm plugins load x - вкл плагин sm plugins unload x - отключить sm plugins reload x - перезапустить (откл и сразу вкл) sm plugins list - список включенных плагинов - это имя плагина (файла [b].smx). Если вы добавите в папку [b]plugins smx файл и смените карту - он включится без RCON команд. Если хотите отключить скрипт, но не хотите его удалять, переместите [b].smx файл в addons/sourcemod/plugins/[b]disabled (отключится после смены карты).
[b] x - это имя плагина (файла .smx). Если вы добавите в папку plugins smx файл и смените карту - он включится без RCON команд. Если хотите отключить скрипт, но не хотите его удалять, переместите .smx файл в addons/sourcemod/plugins/disabled (отключится после смены карты).
Пробуем сделать первый плагин:
1. Создайте в папке 'scripting' x.sp (обычный текст. документ просто переименовать). 2. Вставьте этот код (скачайте в прикреплениях, т. к. отступы важны): Код // UTF-8 (без BOM)
#include <sourcemod>
public OnPluginStart() { PrintToServer("SM скрипт включен!");
new x = 1; PrintToServer("x = %d", x); new y = 4 + x; PrintToServer("y = 4 + %d = %d", x, y);
new String:x_str[] = "CS:Source"; PrintToServer("x_str = \"%s\" | Символов в тексте: %d", x_str, strlen(x_str));
PrintToServer("Теперь пробуем цикл for"); for (new i = 1; i < 6; i++) PrintToServer("i = %i", i);
decl String:text[75]; GetCurrentMap(text, 75); PrintToServer("Текущая карта: %s", text);
FormatTime(text, 75, "%d/%m/%Y | %H:%M"); PrintToServer("Дата | Время: %s", text);
PrintToServer("Слотов на сервере: %d", GetMaxClients());
// Ловим событие (игрок прыгнул) HookEvent("player_jump", player_jump); }
public player_jump(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); new hp = GetClientHealth(client); if (hp < 500) SetEntProp(client, Prop_Send, "m_iHealth", hp + 1); }
Используйте программу [b]Notepad++ (текстовый редактор), соблюдайте одинаковое количество отступов в колонках (советую использовать [b]Tab). Сохраните документ в[b]UTF-8 без BOM, т.к. в коде есть русский текст: Код SM скрипт включен! x = 1 y = 4 + 1 = 5 x_str = "CS:Source" | Символов в тексте: 9 Теперь пробуем цикл for i = 1 i = 2 i = 3 i = 4 i = 5 Текущая карта: de_cbble Дата | Время: 25/05/2012 | 18:04 Слотов на сервере: 7
Теперь [b]скомпилируйте, запустите плагин, и смотрите в консоль сервера: Вы можете зайти на сервер и попрыгать. После каждого прыжка вам будет добавляться 1 hp.
Полезные ссылки:
- Обязательно, первым делом, ознакомьтесь с этой статьёй - [url=http://u.to/vjC8]http://docs.sourcemod.net/api/ - список всех SM функций, синтаксис, описание - http://wiki.alliedmods.net/ - разная информация
#include - подключает библиотеку 'sourcemod'.
В разных библиотеках разные функции и чтобы иметь доступ к определенной функции, нужно подключить соответсвующую библиотеку. Все они находятся в addons\sourcemod\scripting\include (файлы с расширением .inc). Как узнать какие библиотеки подключать: об этом есть отдельный урок.
Советую сначала тестировать различные варианты кода в событии OnPluginStart(). Внутри используйте PrintToServer[/url] для вывода данных в консоль сервера - так вы сможете узнать что чему равно и когда было выполнено, и заходить в игру не надо.
Прикрепления:
Сообщение отредактировал |
 |
|
|
| выдыхай | Offline Дата: Суббота, 03.08.2013, 10:33 | Сообщение # 2 |
![выдыхай]()
Постов: 64 |
 |
| Используйте программу Notepad++ (текстовый редактор), соблюдайте одинаковое количество отступов в колонках (советую использовать Tab). Сохраните документ вUTF-8 без BOM, т.к. в коде есть русский текст:
Теперь скомпилируйте, запустите плагин, и смотрите в консоль сервера:
Прикрепления:
Сообщение отредактировал |
 |
|
|