SourcePawn — Создание NoBlock на скриптовом языке

Кстати говоря, Вы можете сделать заказ у разработчика которого вы сейчас читаете, по любым вопросам с администрированием серверов, а также сайтами. Я помогу в любой задаче, оплата почасовая. Можете обратиться в Telegram для быстрой обратной связи, либо на почту которая на странице "Обо мне".

Дата публикации: 09.07.2017
Дата обновления: 21.12.2017

Сегодня мы попробуем написать простейший Noblock плагин для игрового сервера на базе SourcePawn, соответственно вам нужны адреса:

http://www.sourcemod.net/

https://sm.alliedmods.net/new-api/

Первая ссылка — это сам Sourcemod, через что работают плагины, устанавливается на сервере, более подробно можете загуглить и найти более подробную информацию о установке на сервер.

Вторая ссылка — все функции что есть в Sourcemod, библиотека всех функций или сказав иначе «словарь» для всех функций что вы можете использовать в своих разработках.

Из первой ссылке вам нужно скачать Sourcemod Stable версию (стабильную) нажав на иконку соответствующей вам операционной системы — http://www.sourcemod.net/downloads.php?branch=stable

Далее, распаковать это куда-то, чтобы в пути к файлам не было русских символов, вообще не рекомендую использовать название вашего ПК как «Вася» или «Петя», пишите все на латинице и проблем в работе с ОС станет намного меньше.

После того как распаковали все файлы, вам нужна папка «addons\sourcemod\scripting», можете попробовать скомпилировать обычный любой исходник в этой папке, перетащив его на файл compile.exe, к примеру basevotes.sp, просто зажимаете мышку с этим файлом, и тащите на compile.exe

После чего он начинает компилироваться и в случае успеха у вас получается на выходе:

//SourceMod Batch Compiler
// by the SourceMod Dev Team

//// basevotes.sp
//
// Code size: 21328 bytes
// Data size: 5788 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 43500 bytes
//
// Compilation Time: 0,22 sec
// ----------------------------------------

Press enter to exit ...

Что указывает на то, что ваш файл с исходником basevotes.sp успешно скомпилирован.

Далее создаете файл обычный noblock.sp в блокноте, только при сохранении нажимаете «Сохранить как», и далее пишите в название noblock.sp и выбираете кодировку UTF-8, все это обязательно, так как вы можете создать файл noblock.sp.txt так как это неправильно, а также вы можете создать файл в кодировке ANSI, что не работает с кириллицей внутри исходника, и в итоге на сервере у вас будут квадраты вместо русских символов.

Также вы можете посмотреть мой плагин  на noblock — https://forums.alliedmods.net/showthread.php?p=2337136 но он не идеально подойдёт для вашего сервера, так как он «отталкивает» игроков друг от друга. А всё виной в этой строке:

SetEntProp(client, Prop_Data, "m_CollisionGroup", 17);

И если данную строчку заменить на данную строку:

SetEntData(client, g_CollisionOffset, 2, 4, true);

то проблема с оттакливанием уйдёт и вы сможете нормально его использовать.

но давайте напишем обычный noblock сами.

public OnPluginStart() 
{
	HookEvent("player_spawn", Event_PlayerSpawn); // регистрация события - человек появился
}

public OnPluginEnd() {
	UnhookEvent("player_spawn", Event_PlayerSpawn); // отключение регистрации события при выключении плагина
}
// проверка на правильность игрока (очень важно)
public bool:ClientValid(client)
{
	if(0 < client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client)) {
		return true; 
	}
	return false; 
} 
// Обрабочик события "человек появился" - регистрация выше
public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	new client = GetClientOfUserId(GetEventInt(event, "userid")); 
	if(ClientValid(client) && GetClientTeam(client) > 1 && IsPlayerAlive(client)) { // проверки валидный игрок, живой, и не спек
		SetEntData(client, g_CollisionOffset, 2, 4, true); // включили noblock
	}
}

Копируем всё это, вставляем в созданный файл noblock.sp и компилируем.

На выходе должен получиться файлик noblock.smx в папке «compiled».

Забираем его в папку plugins на нашем сервере, и радуемся своему noblock плагину.

Задать любой вопрос вы можете по этой ссылке.

Кстати говоря, Вы можете сделать заказ у разработчика которого вы сейчас читаете, по любым вопросам с администрированием серверов, а также сайтами. Я помогу в любой задаче, оплата почасовая. Можете обратиться в Telegram для быстрой обратной связи, либо на почту которая на странице "Обо мне".