Иконка ресурса

Following C4 1.0.1

ilga80

Участник
Сообщения
140
Реакции
287
  • Автор ресурса
  • #1
[CSS] Following C4 v1.0.1
Описание:
Забавный плагин. Бомба следует за игроком который ее поставил.Когда игрок умрет, c4 будет преследовать ближайшего игрока.

Квары(Cvars):
Находятся в cstrike/cfg/sourcemod/plugin.FollowingC4.cfg
PHP:
sm_followingc4_auto_update - 1/0 (Включить автообновление)
sm_followingc4_model "models/weapons/w_c4_planted.mdl" - путь к модели бомбы
sm_followingc4_size "1.0" - размер бомбы

Установка:
FollowingC4.smx кинуть в addons/sourcemod/plugins
FollowingC4.sp кинуть в addons/sourcemod/scripting
plugin.FollowingC4.cfg кинуть в cfg/sourcemod

Для автообновления установите Updater

http://www.youtube.com/watch?v=X4kApIKCHjM

FollowingC4new.sp - новая версия без кваров(исходник компилится)
PHP:
sm_followingc4_size
sm_followingc4_model
P.S.Сам проверил на css v75 карта de_dust2
Оригинал
 
Последнее редактирование:

Пыхарь

Участник
Сообщения
145
Реакции
18
Re: [CSS] Following C4 v1.0.0

#include <sourcemod>
#include <sdktools>
#include <smlib>

всё учел?
 

legend1998

Участник
Сообщения
286
Реакции
187
Re: [CSS] Following C4 v1.0.0

Замените if (edict_distance < distance || distance = 0.0) на if (edict_distance < distance || distance == 0.0)
Появятся другие ошибки... :(
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Re: [CSS] Following C4 v1.0.0

PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <smlib>

#undef REQUIRE_PLUGIN
#include <updater>

#define UPDATE_URL	"http://snbx.info/followingc4/followingc4.txt"
#define PLUGIN_VERSION "1.0.1"

public Plugin:myinfo =
{
	name = "Following C4",
	author = "Mitch",
	description = "Makes the C4 Follow the planter, and if he dies then follows another unfortunate soul.",
	version = PLUGIN_VERSION,
	url = "http://snbx.info/"
};

new Handle:updaterCvar = INVALID_HANDLE;
new gLeaderOffset;

new C4Hostage;
new FollowingPlayer;

public OnPluginStart()
{
	updaterCvar = CreateConVar("sm_followingc4_auto_update", "1", "Enables automatic updating (has no effect if Updater is not installed)");
	AutoExecConfig();
	gLeaderOffset = FindSendPropOffs("CHostage", "m_leader");
	HookEvent("player_death", PlayerDeathEvent);
	HookEvent("bomb_planted", BomPlanted_Event);
}
public OnPluginEnd()
{
	if(IsHostage(C4Hostage))
	{
		AcceptEntityInput(C4Hostage, "Kill");
	}
}
public OnClientDisconnect(client)
{
	if(client==FollowingPlayer)
	{
		FindNewPlayer();
	}
}
public PlayerDeathEvent(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = (GetClientOfUserId(GetEventInt(event, "userid")));
	if(client==FollowingPlayer)
	{
		FindNewPlayer();
	}
}
public OnAllPluginsLoaded() 
{
	if(LibraryExists("updater")) 
	{
		Updater_AddPlugin(UPDATE_URL);
	}
	CreateConVar("sm_followingc4_version", PLUGIN_VERSION, "C4Model Version", FCVAR_DONTRECORD|FCVAR_NOTIFY);	
}
FindNewPlayer()
{
	new Float:orig[3];
	GetEntPropVector(C4Hostage, Prop_Send, "m_vecOrigin", orig);
	
	decl Float:vecOrigin_edict[3];
	new Float:distance = 0.0;
	new closestEdict = INVALID_ENT_REFERENCE;
	new Float:edict_distance = 0.0;

	for (new edict=1; edict <= MaxClients; edict++) 
	{		
		if (!IsValidEdict(edict))
		{
			continue;
		}
		
		if (edict == C4Hostage)
		{
			continue;
		}
			
		if (GetEntSendPropOffs(edict, "m_vecOrigin") == -1)
		{
			continue;
		}
			
		GetEntPropVector(edict, Prop_Send, "m_vecOrigin", vecOrigin_edict);
		edict_distance = GetVectorDistance(orig, vecOrigin_edict);
		if (edict_distance < distance || distance == 0.0)
		{
			distance = edict_distance;
			closestEdict = edict;
		}
	}
	FollowingPlayer = closestEdict;
	if(FollowingPlayer > 0 && IsClientInGame(FollowingPlayer) && IsPlayerAlive(FollowingPlayer))
	{
		if(IsHostage(C4Hostage))
		{
			SetEntDataEnt2(C4Hostage, gLeaderOffset, FollowingPlayer);
		}
	}
}
public OnMapStart()
{
	CreateTimer(5.0, Timer_OwnerRepeat, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:Timer_OwnerRepeat(Handle:timer)
{
	if(FollowingPlayer > 0 && IsClientInGame(FollowingPlayer) && IsPlayerAlive(FollowingPlayer))
	{
		if(IsHostage(C4Hostage))
		{
			SetEntDataEnt2(C4Hostage, gLeaderOffset, FollowingPlayer);
		}
	}
}
public Action:BomPlanted_Event(Handle:event, const String:name[], bool:dontBroadcast)
{
	FollowingPlayer = GetClientOfUserId(GetEventInt(event, "userid"));
	new c4 = -1;
	c4 = FindEntityByClassname(c4, "planted_c4");
	new Float:pos[3], Float:angles[3];
	if(c4 != -1)
	{
		GetEntPropVector(FollowingPlayer, Prop_Data, "m_vecOrigin", pos);
		GetEntPropVector(FollowingPlayer, Prop_Data, "m_angRotation", angles);
		decl String:c4Model[128];
		GetEntPropString(c4, Prop_Data, "m_ModelName", c4Model,sizeof(c4Model));
		C4Hostage = CreateEntityByName("hostage_entity");
		if((C4Hostage == -1) )
			PrintToServer("Error making hostage!");
		
		DispatchKeyValue(C4Hostage, "model", c4Model);
		DispatchKeyValue(C4Hostage, "skin", "1");
		DispatchKeyValue(C4Hostage, "solid", "0");
		DispatchKeyValue(C4Hostage, "disableshadows", "1");
		SetEntityModel(C4Hostage, c4Model);
		DispatchSpawn(C4Hostage);
		SetEntProp(C4Hostage, Prop_Data, "m_takedamage", 0);
		SetEntityRenderColor(C4Hostage, 255, 255, 255, 0);
		SetEntityRenderMode(C4Hostage, RENDER_TRANSALPHA);

		TeleportEntity(C4Hostage, pos, angles, NULL_VECTOR);
		
		SetEntProp(C4Hostage, Prop_Data, "m_CollisionGroup", 1);
		SetEntData(C4Hostage, FindSendPropOffs("CHostage", "m_isRescued"), true, 4, true);
		
		SetVariantString("!activator");
		AcceptEntityInput(c4, "SetParent", C4Hostage, c4, 0);
	}
	return Plugin_Continue;
}

public Action:Updater_OnPluginDownloading() 
{
	if(!GetConVarBool(updaterCvar)) 
	{
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

public Updater_OnPluginUpdated() 
{
	ReloadPlugin();
}
bool:IsHostage(Ent)
{
	if(Ent != -1)
	{
		if(IsValidEdict(Ent) && IsValidEntity(Ent) && IsEntNetworkable(Ent))
		{
			decl String:ClassName[255];
			GetEdictClassname(Ent, ClassName, 255);
			if(StrEqual(ClassName, "hostage_entity"))
			{
				return true;
			}
		}
	}
	return false;
}
:victory:
 

Вложения

  • cspp.sp
    4.7 КБ · Просмотры: 14
  • cspp.smx
    13.4 КБ · Просмотры: 8
  • Plugin.jpg
    Plugin.jpg
    17.5 КБ · Просмотры: 57

SenatoR

Участник
Сообщения
773
Реакции
344
Re: [CSS] Following C4 v1.0.0

Добавил 2 квара

Following_C4_Size = CreateConVar("c4_size", "1.0", "Размер бомбы.", 0, true, 0.1, true, 10.0);
Following_C4_Model = CreateConVar("c4_model", "models/weapons/w_c4_planted.mdl", "Модель бомбы");
 

Вложения

  • FollowingC4.smx
    14.1 КБ · Просмотры: 9
  • FollowingC4.sp
    5.9 КБ · Просмотры: 13
Последнее редактирование:

SenatoR

Участник
Сообщения
773
Реакции
344
Re: [CSS] Following C4 v1.0.0

Точно. Всё чётко компилируется и работает нормально вроде. Но... Я так понял, изменение размера бомбы уже не возможно (мне это как раз и не надо, в принципе, но для осведомлённости)?


Спасибо. Правда, я уже то накомпилировал) На другом сервере сейчас опробую твой вариант.
И он с возможностью изменения размера всё же, да?

Да,ща сделаю модель еще
 

SenatoR

Участник
Сообщения
773
Реакции
344
Re: [CSS] Following C4 v1.0.0

Шикарно! Вот теперь всё отлично компилируется, работает и изменяется (правда, я в предыдущем варианте лишь изменял квары, но суть же та же).
Вижу, ilga80 добавил оба варианта, что весьма верно) Не знаю, может стоит и на том сайте показать от SenatoRа, "как надо плагины писать"...
Оффтоп

Загляну,только я в бомбе ничего не писал, использовал код тогоже автора...
Плагин на который ты кинул ссылку - посмотрю
 
Последнее редактирование модератором:
Сверху Снизу