Jump to content

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


Райан

Recommended Posts

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

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

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

bind mwheelup sm_explode

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

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

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

Версия от 16.09.2022
 - Добавлены отсутствующие строки перевода
Edited by Райан
Добавил новую версию и список изменений (see edit history)

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 5 weeks later...
  • Администратор

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

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

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 7 months later...
  • 1 year later...
  • Администратор

Плагин обновлен, скомпилирован на версии 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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 2 months later...
  • Администратор

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

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)

 

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • Администратор
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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...