Перейти к содержанию

Взрыв под ногами (Explode)


Рекомендуемые сообщения

  • Администратор

Очень простой плагин, стреляющий искрами из под ваших ног! Использовать его смогут только админы. Он прекрасно работает в L4D2, и это только визуальный эффект. Он никак не влияет на геймплей.

Полезный бинд:

bind mwheelup sm_explode

Различные демо:

Демонстрация на примере Counter-Strike: Source

Список изменений:

Версия от 16.09.2022
 - Добавлены отсутствующие строки перевода
Изменено пользователем Райан
Добавил новую версию и список изменений (смотреть историю редактирования)
Ссылка на комментарий
Поделиться на другие сайты
  • 5 недель спустя...
  • Администратор

Привет, @Чат Бот,

Ты же знаешь, что крутые ребята, которые пишут невероятные плагины, когда учились тоже писали именно такую чушь? И скорее всего, они сами понимали что это чушь, и публиковали ее, потом читали критику, такую как твоя, и учились на ней. Все мы так поступаем!

Написание плагинов, как и шитье или вязание - это ремесло. И тебе нужно работать над ремеслом, чтобы хорошо им овладеть. И твой первый плагин "Чушь", это не причина, чтобы отказываться от продолжения обучения!

Ссылка на комментарий
Поделиться на другие сайты
  • 7 месяцев спустя...
  • Администратор

Если понадобится этот плагин, он включен в следующую сборку:

 

Ссылка на комментарий
Поделиться на другие сайты
  • 1 год спустя...
  • Администратор

Плагин обновлен, скомпилирован на версии Sourcemod 1.11, я постарался устранить предупреждения связанные с:

for( new i = 1; i <= MaxClients; i++)
warning 234: symbol "FCVAR_PLUGIN" is marked as deprecated: No logic using this flag ever existed in a released game. It only ever appeared in the first hl2sdk.

Полностью код теперь выглядит следующим образом:

#include <sourcemod>
#include <sdktools>

#pragma semicolon 1

#define EXPLODE_PLUGIN_VERSION "0.1"
#define SOUND_BOOM "ambient/explosions/explode_8.wav"

public Plugin:myinfo = 
{
	name = "Explode", 
	author = "chundo", 
	description = "Explode a player", 
	version = "0.1", 
	url = "http://www.mefightclub.com/"
};

new g_fire;
new g_HaloSprite;
new g_ExplosionSprite;
new Handle:g_cvarExplodeMode = INVALID_HANDLE;
new Handle:g_cvarExplodeRadius = INVALID_HANDLE;

public OnPluginStart() {
	LoadTranslations("explode.phrases");
	CreateConVar("sm_explode_version", EXPLODE_PLUGIN_VERSION, "Explode version.", FCVAR_NONE | FCVAR_NOTIFY);
	g_cvarExplodeMode = CreateConVar("sm_explode_mode", "0", "Sets who explosions will hurt. 0 = target only, 1 = team only, 2 = everyone", FCVAR_NONE);
	g_cvarExplodeRadius = CreateConVar("sm_explode_radius", "600", "Sets who explosions will hurt. 0 = target only, 1 = team only, 2 = everyone", FCVAR_NONE);
	RegAdminCmd("sm_explode", Command_Explode, ADMFLAG_SLAY, "Explode a player");
	AutoExecConfig(false);
}

public OnMapStart() {
	g_fire = PrecacheModel("materials/sprites/fire2.vmt");
	g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt");
	g_ExplosionSprite = PrecacheModel("sprites/sprite_fire01.vmt");
	PrecacheSound(SOUND_BOOM, true);
}

public Action:Command_Explode(client, args) {
	if (args < 1) {
		ReplyToCommand(client, "[SM] Usage: sm_explode <#userid|name>");
		return Plugin_Handled;
	}
	
	decl String:arg[65];
	GetCmdArg(1, arg, sizeof(arg));
	
	decl String:target_name[MAX_TARGET_LENGTH];
	decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
	
	if ((target_count = ProcessTargetString(
				arg, 
				client, 
				target_list, 
				MAXPLAYERS, 
				COMMAND_FILTER_ALIVE, 
				target_name, 
				sizeof(target_name), 
				tn_is_ml)) <= 0) {
		ReplyToTargetError(client, target_count);
		return Plugin_Handled;
	}
	
	for (new i = 0; i < target_count; i++) {
		PerformExplode(client, target_list[i]);
	}
	
	ShowActivity2(client, "[SM] ", "%t %s", "Exploded", target_name);
	
	return Plugin_Handled;
}

public PerformExplode(client, target) {
	new mode = GetConVarInt(g_cvarExplodeMode);
	new radius = GetConVarInt(g_cvarExplodeRadius);
	
	LogAction(client, target, "\"%L\" slayed \"%L\"", client, target);
	decl Float:location[3];
	GetClientAbsOrigin(target, location);
	
	new color[4] = { 188, 220, 255, 200 };
	EmitAmbientSound(SOUND_BOOM, location, client, SNDLEVEL_RAIDSIREN);
	TE_SetupExplosion(location, g_ExplosionSprite, 10.0, 1, 0, radius, 5000);
	TE_SendToAll();
	TE_SetupBeamRingPoint(location, 10.0, float(radius), g_fire, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, color, 10, 0);
	TE_SendToAll();
	
	location[2] += 10;
	EmitAmbientSound(SOUND_BOOM, location, client, SNDLEVEL_RAIDSIREN);
	TE_SetupExplosion(location, g_ExplosionSprite, 10.0, 1, 0, radius, 5000);
	TE_SendToAll();
	
	ForcePlayerSuicide(target);
	
	if (mode > 0)
		HurtOtherPlayers(target, radius, (mode == 1));
}

public HurtOtherPlayers(target, radius, bool:teamonly) {
	new Float:vec[3];
	GetClientAbsOrigin(target, vec);
	for( new i = 1; i <= MaxClients; i++)	{
		if (!IsClientInGame(i) || !IsPlayerAlive(i) || target == i
			 || (teamonly && GetClientTeam(i) != GetClientTeam(target)))
		continue;
		
		new Float:pos[3];
		GetClientEyePosition(i, pos);
		new Float:distance = GetVectorDistance(vec, pos);
		if (distance > radius)
			continue;
		
		new damage = 220;
		damage = RoundToFloor(damage * (radius - distance) / radius);
		SlapPlayer(i, damage, false);
		TE_SetupExplosion(pos, g_ExplosionSprite, 0.05, 1, 0, 1, 1);
		TE_SendToAll();
	}
}

 

explode.zip

Ссылка на комментарий
Поделиться на другие сайты
  • 2 месяца спустя...
  • Администратор

Я обнаружил ошибку. Суть в том, если команду прописать на игрока, которого нет на сервере, или мы ошибемся в его нике, то в логи мы получим следующий текст:

L 09/15/2022 - 20:12:22: [SM] Blaming: explode.smx
L 09/15/2022 - 20:12:22: [SM] Call stack trace:
L 09/15/2022 - 20:12:22: [SM]   [0] ReplyToCommand
L 09/15/2022 - 20:12:22: [SM]   [1] Line 106, commandfilters::ReplyToTargetError
L 09/15/2022 - 20:12:22: [SM]   [2] Line 61, D:\sm111\addons\sourcemod\scripting\explode.sp::Command_Explode
L 09/15/2022 - 20:12:38: [SM] Exception reported: Language phrase "No matching client" not found (arg 4)

 

Ссылка на комментарий
Поделиться на другие сайты
  • Администратор
40 минут назад, Райан сказал:
L 09/15/2022 - 20:12:22: [SM] Blaming: explode.smx
L 09/15/2022 - 20:12:22: [SM] Call stack trace:
L 09/15/2022 - 20:12:22: [SM]   [0] ReplyToCommand
L 09/15/2022 - 20:12:22: [SM]   [1] Line 106, commandfilters::ReplyToTargetError
L 09/15/2022 - 20:12:22: [SM]   [2] Line 61, D:\sm111\addons\sourcemod\scripting\explode.sp::Command_Explode
L 09/15/2022 - 20:12:38: [SM] Exception reported: Language phrase "No matching client" not found (arg 4)

Исправлено, добавлены отсутствующие строки перевода.

explode.zip

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...