View Single Post
Maximilian_
Veteran Member
Join Date: Oct 2014
Old 05-17-2019 , 09:01   Re: [Boss] SCP-173 (My version)
Reply With Quote #11

decompiled by Lysis, you should rewrite it

Code:
 public PlVers:__version =
{
	version = 5,
	filevers = "1.8.0.6017",
	date = "06/02/2018",
	time = "18:22:52"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
	name = "Core",
	file = "core",
	autoload = 0,
	required = 0,
};
new MaxClients;
new TFHoliday:TFHoliday_Birthday;
new TFHoliday:TFHoliday_Halloween;
new TFHoliday:TFHoliday_Christmas;
new TFHoliday:TFHoliday_EndOfTheLine;
new TFHoliday:TFHoliday_CommunityUpdate;
new TFHoliday:TFHoliday_ValentinesDay;
new TFHoliday:TFHoliday_MeetThePyro;
new TFHoliday:TFHoliday_SpyVsEngyWar;
new TFHoliday:TFHoliday_FullMoon;
new TFHoliday:TFHoliday_HalloweenOrFullMoon;
new TFHoliday:TFHoliday_HalloweenOrFullMoonOrValentines;
new TFHoliday:TFHoliday_AprilFools;
public Extension:__ext_tf2 =
{
	name = "TF2 Tools",
	file = "game.tf2.ext",
	autoload = 0,
	required = 1,
};
public Extension:__ext_tf2items =
{
	name = "TF2Items",
	file = "tf2items.ext.2.ep2v",
	autoload = 0,
	required = 1,
};
public Extension:__ext_sdktools =
{
	name = "SDKTools",
	file = "sdktools.ext",
	autoload = 1,
	required = 1,
};
new String:TFResourceNames[18][];
public Extension:__ext_regex =
{
	name = "Regex Extension",
	file = "regex.ext",
	autoload = 1,
	required = 1,
};
new bool:CSkipList[66] =
{
	1634038374, 1868980075, 1701999730, 845116275, 0, 1634038374, 1868980075, 1701999730, 845116275, 2020438830, 0, 2448, 2468, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845571630, 0, 0, 47, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
new CTeamColors[1][3];
new Handle:CTrie = 1634038374;
public SharedPlugin:__pl_FF2 =
{
	name = "freak_fortress_2",
	file = "freak_fortress_2.smx",
	required = 1,
};
new String:this_plugin_name[80];
new BossTeam = 3;
new SecondsLeft[66];
new BossDamage;
new Handle:hDisableRage[66];
new Handle:hTimerTick[66];
public Plugin:myinfo =
{
	name = "Freak Fortress 2: SCP-173 Special Abilities",
	description = "",
	author = "OriginalNero",
	version = "",
	url = ""
};
public void:__ext_core_SetNTVOptional()
{
	MarkNativeAsOptional("GetFeatureStatus");
	MarkNativeAsOptional("RequireFeature");
	MarkNativeAsOptional("AddCommandListener");
	MarkNativeAsOptional("RemoveCommandListener");
	MarkNativeAsOptional("BfWriteBool");
	MarkNativeAsOptional("BfWriteByte");
	MarkNativeAsOptional("BfWriteChar");
	MarkNativeAsOptional("BfWriteShort");
	MarkNativeAsOptional("BfWriteWord");
	MarkNativeAsOptional("BfWriteNum");
	MarkNativeAsOptional("BfWriteFloat");
	MarkNativeAsOptional("BfWriteString");
	MarkNativeAsOptional("BfWriteEntity");
	MarkNativeAsOptional("BfWriteAngle");
	MarkNativeAsOptional("BfWriteCoord");
	MarkNativeAsOptional("BfWriteVecCoord");
	MarkNativeAsOptional("BfWriteVecNormal");
	MarkNativeAsOptional("BfWriteAngles");
	MarkNativeAsOptional("BfReadBool");
	MarkNativeAsOptional("BfReadByte");
	MarkNativeAsOptional("BfReadChar");
	MarkNativeAsOptional("BfReadShort");
	MarkNativeAsOptional("BfReadWord");
	MarkNativeAsOptional("BfReadNum");
	MarkNativeAsOptional("BfReadFloat");
	MarkNativeAsOptional("BfReadString");
	MarkNativeAsOptional("BfReadEntity");
	MarkNativeAsOptional("BfReadAngle");
	MarkNativeAsOptional("BfReadCoord");
	MarkNativeAsOptional("BfReadVecCoord");
	MarkNativeAsOptional("BfReadVecNormal");
	MarkNativeAsOptional("BfReadAngles");
	MarkNativeAsOptional("BfGetNumBytesLeft");
	MarkNativeAsOptional("BfWrite.WriteBool");
	MarkNativeAsOptional("BfWrite.WriteByte");
	MarkNativeAsOptional("BfWrite.WriteChar");
	MarkNativeAsOptional("BfWrite.WriteShort");
	MarkNativeAsOptional("BfWrite.WriteWord");
	MarkNativeAsOptional("BfWrite.WriteNum");
	MarkNativeAsOptional("BfWrite.WriteFloat");
	MarkNativeAsOptional("BfWrite.WriteString");
	MarkNativeAsOptional("BfWrite.WriteEntity");
	MarkNativeAsOptional("BfWrite.WriteAngle");
	MarkNativeAsOptional("BfWrite.WriteCoord");
	MarkNativeAsOptional("BfWrite.WriteVecCoord");
	MarkNativeAsOptional("BfWrite.WriteVecNormal");
	MarkNativeAsOptional("BfWrite.WriteAngles");
	MarkNativeAsOptional("BfRead.ReadBool");
	MarkNativeAsOptional("BfRead.ReadByte");
	MarkNativeAsOptional("BfRead.ReadChar");
	MarkNativeAsOptional("BfRead.ReadShort");
	MarkNativeAsOptional("BfRead.ReadWord");
	MarkNativeAsOptional("BfRead.ReadNum");
	MarkNativeAsOptional("BfRead.ReadFloat");
	MarkNativeAsOptional("BfRead.ReadString");
	MarkNativeAsOptional("BfRead.ReadEntity");
	MarkNativeAsOptional("BfRead.ReadAngle");
	MarkNativeAsOptional("BfRead.ReadCoord");
	MarkNativeAsOptional("BfRead.ReadVecCoord");
	MarkNativeAsOptional("BfRead.ReadVecNormal");
	MarkNativeAsOptional("BfRead.ReadAngles");
	MarkNativeAsOptional("BfRead.GetNumBytesLeft");
	MarkNativeAsOptional("PbReadInt");
	MarkNativeAsOptional("PbReadFloat");
	MarkNativeAsOptional("PbReadBool");
	MarkNativeAsOptional("PbReadString");
	MarkNativeAsOptional("PbReadColor");
	MarkNativeAsOptional("PbReadAngle");
	MarkNativeAsOptional("PbReadVector");
	MarkNativeAsOptional("PbReadVector2D");
	MarkNativeAsOptional("PbGetRepeatedFieldCount");
	MarkNativeAsOptional("PbSetInt");
	MarkNativeAsOptional("PbSetFloat");
	MarkNativeAsOptional("PbSetBool");
	MarkNativeAsOptional("PbSetString");
	MarkNativeAsOptional("PbSetColor");
	MarkNativeAsOptional("PbSetAngle");
	MarkNativeAsOptional("PbSetVector");
	MarkNativeAsOptional("PbSetVector2D");
	MarkNativeAsOptional("PbAddInt");
	MarkNativeAsOptional("PbAddFloat");
	MarkNativeAsOptional("PbAddBool");
	MarkNativeAsOptional("PbAddString");
	MarkNativeAsOptional("PbAddColor");
	MarkNativeAsOptional("PbAddAngle");
	MarkNativeAsOptional("PbAddVector");
	MarkNativeAsOptional("PbAddVector2D");
	MarkNativeAsOptional("PbRemoveRepeatedFieldValue");
	MarkNativeAsOptional("PbReadMessage");
	MarkNativeAsOptional("PbReadRepeatedMessage");
	MarkNativeAsOptional("PbAddMessage");
	MarkNativeAsOptional("Protobuf.ReadInt");
	MarkNativeAsOptional("Protobuf.ReadFloat");
	MarkNativeAsOptional("Protobuf.ReadBool");
	MarkNativeAsOptional("Protobuf.ReadString");
	MarkNativeAsOptional("Protobuf.ReadColor");
	MarkNativeAsOptional("Protobuf.ReadAngle");
	MarkNativeAsOptional("Protobuf.ReadVector");
	MarkNativeAsOptional("Protobuf.ReadVector2D");
	MarkNativeAsOptional("Protobuf.GetRepeatedFieldCount");
	MarkNativeAsOptional("Protobuf.SetInt");
	MarkNativeAsOptional("Protobuf.SetFloat");
	MarkNativeAsOptional("Protobuf.SetBool");
	MarkNativeAsOptional("Protobuf.SetString");
	MarkNativeAsOptional("Protobuf.SetColor");
	MarkNativeAsOptional("Protobuf.SetAngle");
	MarkNativeAsOptional("Protobuf.SetVector");
	MarkNativeAsOptional("Protobuf.SetVector2D");
	MarkNativeAsOptional("Protobuf.AddInt");
	MarkNativeAsOptional("Protobuf.AddFloat");
	MarkNativeAsOptional("Protobuf.AddBool");
	MarkNativeAsOptional("Protobuf.AddString");
	MarkNativeAsOptional("Protobuf.AddColor");
	MarkNativeAsOptional("Protobuf.AddAngle");
	MarkNativeAsOptional("Protobuf.AddVector");
	MarkNativeAsOptional("Protobuf.AddVector2D");
	MarkNativeAsOptional("Protobuf.RemoveRepeatedFieldValue");
	MarkNativeAsOptional("Protobuf.ReadMessage");
	MarkNativeAsOptional("Protobuf.ReadRepeatedMessage");
	MarkNativeAsOptional("Protobuf.AddMessage");
	VerifyCoreVersion();
	return void:0;
}

GetThisPluginName()
{
	decl String:pluginName[80];
	GetPluginFilename(Handle:0, pluginName, 80);
	ReplaceString(pluginName, 80, ".ff2", "", false);
	new forwardSlash = -1;
	new backwardSlash = -1;
	new finalPluginName = -1;
	do {
		forwardSlash = StrContains(pluginName[finalPluginName + 1], "/", true);
		backwardSlash = StrContains(pluginName[finalPluginName + 1], "\", true);
		new var1;
		if ((backwardSlash < forwardSlash && backwardSlash != -1) || forwardSlash == -1)
		{
			if (!(backwardSlash == -1))
			{
				finalPluginName = backwardSlash;
			}
		}
		else
		{
			new var3;
			if ((forwardSlash < backwardSlash && forwardSlash != -1) || backwardSlash == -1)
			{
				if (!(forwardSlash == -1))
				{
					finalPluginName = forwardSlash;
				}
			}
		}
		strcopy(this_plugin_name, 80, pluginName[finalPluginName + 1]);
		return 0;
	} while (true);
}

public void:OnPluginStart()
{
	OnPluginStart2();
	GetThisPluginName();
	return void:0;
}

public Action:FF2_OnAbility(client, String:plugin_name[], String:ability_name[], status)
{
	if (plugin_name[0])
	{
		if (strcmp(this_plugin_name, plugin_name, true))
		{
			return Action:0;
		}
	}
	FF2_OnAbility2(client, plugin_name, ability_name, status);
	return Action:0;
}

public OnPluginStart2()
{
	HookEvent("teamplay_round_win", OnRoundEnd, EventHookMode:1);
	HookEvent("teamplay_round_start", OnRoundStart, EventHookMode:1);
	return 0;
}

public Action:OnRoundEnd(Handle:event, String:name[], bool:dontBroadcast)
{
	TurnOnLights();
	ResetHandles();
	return Action:0;
}

public Action:OnRoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
	TurnOnLights();
	ResetHandles();
	return Action:0;
}

public Action:FF2_OnAbility2(boss, String:plugin_name[], String:ability_name[], status)
{
	if (!strcmp(ability_name, "ff2_scp", true))
	{
		new client = GetClientOfUserId(FF2_GetBossUserId(boss));
		new Float:position[3] = 0.0;
		new bool:otherTeamIsAlive;
		new target = 1;
		while (target <= MaxClients)
		{
			new var1;
			if (IsClientInGame(target) && IsPlayerAlive(target) && client != target && !FF2_GetFF2flags(target) & 128)
			{
				otherTeamIsAlive = true;
				if (!otherTeamIsAlive)
				{
					return Action:0;
				}
				new target;
				new tries;
				tries++;
				target = GetRandomInt(1, MaxClients);
				while (tries == 100)
				{
					new var2;
					if (!(!IsValidEdict(target) || client != target || FF2_GetFF2flags(target) & 128 || !IsPlayerAlive(target)))
					{
						GetEntPropVector(target, PropType:1, "m_vecOrigin", position, 0);
						TeleportEntity(client, position, NULL_VECTOR, NULL_VECTOR);
						TF2_AddCondition(client, TFCond:6, FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0), 0);
						FF2_SetBossCharge(boss, 0, 0.0);
						SecondsLeft[client] = RoundToNearest(FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0)) + -1;
						BossDamage = FF2_GetBossRageDamage(boss);
						FF2_SetBossRageDamage(boss, 1000000);
						hDisableRage[client] = CreateTimer(0.1, DisableRage, boss, 1);
						hTimerTick[client] = CreateTimer(1.0, TimerTick, boss, 1);
						CreateTimer(FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0), DeleteTimer, boss, 0);
					}
				}
				return Action:0;
			}
			target++;
		}
		if (!otherTeamIsAlive)
		{
			return Action:0;
		}
		new target;
		new tries;
		tries++;
		target = GetRandomInt(1, MaxClients);
		while (tries == 100)
		{
			new var2;
			if (!(!IsValidEdict(target) || client != target || FF2_GetFF2flags(target) & 128 || !IsPlayerAlive(target)))
			{
				GetEntPropVector(target, PropType:1, "m_vecOrigin", position, 0);
				TeleportEntity(client, position, NULL_VECTOR, NULL_VECTOR);
				TF2_AddCondition(client, TFCond:6, FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0), 0);
				FF2_SetBossCharge(boss, 0, 0.0);
				SecondsLeft[client] = RoundToNearest(FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0)) + -1;
				BossDamage = FF2_GetBossRageDamage(boss);
				FF2_SetBossRageDamage(boss, 1000000);
				hDisableRage[client] = CreateTimer(0.1, DisableRage, boss, 1);
				hTimerTick[client] = CreateTimer(1.0, TimerTick, boss, 1);
				CreateTimer(FF2_GetAbilityArgumentFloat(boss, this_plugin_name, ability_name, 1, 5.0), DeleteTimer, boss, 0);
			}
		}
		return Action:0;
	}
	return Action:0;
}

public void:TF2_OnConditionAdded(player, TFCond:condition)
{
	new client = 1;
	while (client <= MaxClients)
	{
		if (FF2_GetBossIndex(client) != -1)
		{
			new boss = FF2_GetBossIndex(client);
			if (FF2_HasAbility(boss, this_plugin_name, "ff2_scp"))
			{
				new var1;
				if (condition == TFCond:6 && client == player)
				{
					TF2_RemoveCondition(client, TFCond:87);
				}
				new var2;
				if (condition == TFCond:87 && client == player)
				{
					TurnOnLights();
				}
			}
		}
		client++;
	}
	return void:0;
}

public void:TF2_OnConditionRemoved(player, TFCond:condition)
{
	new client = 1;
	while (client <= MaxClients)
	{
		if (FF2_GetBossIndex(client) != -1)
		{
			new boss = FF2_GetBossIndex(client);
			if (FF2_HasAbility(boss, this_plugin_name, "ff2_scp"))
			{
				new Float:pos[3] = 0.0;
				new Float:vec[3] = 0.0;
				new var1;
				if (condition == TFCond:6 && client == player)
				{
					GetEntPropVector(client, PropType:1, "m_vecOrigin", pos, 0);
					GetEntPropVector(client, PropType:1, "m_vecVelocity", vec, 0);
					TF2_AddCondition(client, TFCond:87, -1.0, 0);
					TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, 3604);
					vec[2] = 0.0;
				}
				new var2;
				if (condition == TFCond:87 && client == player)
				{
					new target = 1;
					while (target <= MaxClients)
					{
						if (IsValidClient(target, false))
						{
							new var3;
							if (BossTeam != GetClientTeam(target) && player != target)
							{
								TurnOffLights(GetClientUserId(target));
							}
						}
						target++;
					}
				}
			}
		}
		client++;
	}
	return void:0;
}

public Action:DeleteTimer(Handle:timer, any:boss)
{
	new client = GetClientOfUserId(FF2_GetBossUserId(boss));
	if (IsValidClient(client, false))
	{
		FF2_SetBossCharge(boss, 0, 0.0);
		FF2_SetBossRageDamage(boss, BossDamage);
		SecondsLeft[client] = 0;
		if (hDisableRage[client])
		{
			KillTimer(hDisableRage[client], false);
			hDisableRage[client] = 0;
		}
		if (hTimerTick[client])
		{
			KillTimer(hTimerTick[client], false);
			hTimerTick[client] = 0;
		}
	}
	return Action:0;
}

public Action:DisableRage(Handle:timer, any:boss)
{
	new client = GetClientOfUserId(FF2_GetBossUserId(boss));
	new var1;
	if (boss == any:-1 || !IsClientInGame(client) || SecondsLeft[client])
	{
		return Action:4;
	}
	FF2_SetBossCharge(boss, 0, 0.0);
	return Action:0;
}

public Action:TimerTick(Handle:timer, any:boss)
{
	new client = GetClientOfUserId(FF2_GetBossUserId(boss));
	new var1;
	if (boss == any:-1 || !IsClientInGame(client) || SecondsLeft[client])
	{
		return Action:4;
	}
	SecondsLeft[client] += -1;
	return Action:0;
}

void:TurnOnLights()
{
	SetCommandFlags("r_screenoverlay", GetCommandFlags("r_screenoverlay") & -16385);
	new target = 1;
	while (target <= MaxClients)
	{
		if (IsValidClient(target, false))
		{
			ClientCommand(target, "r_screenoverlay \"\"");
		}
		target++;
	}
	SetCommandFlags("r_screenoverlay", GetCommandFlags("r_screenoverlay") & 16384);
	return void:0;
}

void:TurnOffLights(userid)
{
	new client = GetClientOfUserId(userid);
	new flags = GetCommandFlags("r_screenoverlay") & -16385;
	SetCommandFlags("r_screenoverlay", flags);
	ClientCommand(client, "r_screenoverlay \"%s\"", "Effects/tp_eyefx/tp_black");
	SetCommandFlags("r_screenoverlay", GetCommandFlags("r_screenoverlay") & 16384);
	return void:0;
}

void:ResetHandles()
{
	new player;
	while (player <= MaxClients)
	{
		if (IsValidClient(player, false))
		{
			if (hDisableRage[player])
			{
				KillTimer(hDisableRage[player], false);
				hDisableRage[player] = 0;
			}
			if (hTimerTick[player])
			{
				KillTimer(hTimerTick[player], false);
				hTimerTick[player] = 0;
			}
		}
		player++;
	}
	return void:0;
}

bool:IsValidClient(client, bool:isAlive)
{
	new var1;
	if (!client || client > MaxClients)
	{
		return false;
	}
	if (isAlive)
	{
		new var2;
		return IsClientInGame(client) && IsPlayerAlive(client);
	}
	return IsClientInGame(client);
}

Last edited by Maximilian_; 05-17-2019 at 09:01.
Maximilian_ is offline