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

Взрыв под ногами (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 пользователей онлайн

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