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

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


ryancoolround

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

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

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

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

bind mwheelup sm_explode

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

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

Сами частицы искр.

Te_sparks.jpg

explode.sp explode.smx

«Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон

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

  • 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

«Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон

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

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

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

Создать аккаунт

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

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

Войти

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

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...