// Decompiled from dod_spechide.amxx by Lysis.
// This is RECONSTRUCTED source, not the author's original: without
// debug symbols the variable names are lost and control flow is
// rebuilt from bytecode. Treat it as a readable approximation.

public CmdSpectate(_arg0, _arg1, _arg2)
{
	if (!sub_204(_arg0, _arg1, _arg2, 1))
	{
		return 1;
	}
	if (read_argc() == 1)
	{
		sub_2eec(_arg0);
		return 1;
	}
	new var1 = 0;
	read_argv(1, var1, 31);
	new var2;
	var2 = sub_2ad0(var1);
	if (!var2)
	{
		return 1;
	}
	if (get_user_team(var2, {0}, "%L") != get_user_team(_arg0, {0}, "%L"))
	{
		client_print(_arg0, 2, "You can't spectate someone from opposite team.");
		return 1;
	}
	new var3 = 0;
	new var4 = 0;
	new var5 = 0;
	sub_2960(_arg0, var4 + var4, var3 + var3, var5 + var5);
	new var6 = var5 + 4;
	new var7 = var3 + 4;
	new var8 = var4 + 4;
	sub_2960(var2, var8 + var8, var7 + var7, var6 + var6);
	if (var2 == _arg0)
	{
		client_print(_arg0, 2, 2704);
		client_print(_arg0, 2, "Syntax: amx_spectate <name> - If no name is given, you will stop spectating.");
		return 1;
	}
	new var9 = 0;
	new var10 = var3 + 4;
	format(var9, 127, "(ADMIN) %s: began a hidden spectate on %s", var3 + var3, var10 + var10);
	sub_2d54(var9);
	new var11 = var5 + 4;
	new var12 = var4 + 4;
	new var13 = var3 + 4;
	log_amx("Cmd: \"%s<%d><%s><%s>\" began hidden spectate on \"%s<%d><%s><%s>\"", var3 + var3, get_user_userid(_arg0), var4 + var4, var5 + var5, var13 + var13, get_user_userid(var2), var12 + var12, var11 + var11);
	new var14 = 0;
	pev(_arg0, 118, var14);
	if (276[_arg0] == 0)
	{
		pev(_arg0, 41, 1992[_arg0]);
		804[_arg0] = pev(_arg0, 89);
		pev(_arg0, 43, 936[_arg0]);
		1068[_arg0] = var14;
		1068[_arg0][1] = var14 + 4/* ERROR unknown load Binary */;
		1068[_arg0][2] = var14 + 8/* ERROR unknown load Binary */;
		1596[_arg0] = pev(_arg0, 73);
		540[_arg0] = pev(_arg0, 70);
		672[_arg0] = pev(_arg0, 69);
		408[_arg0] = pev(_arg0, 89);
		pev(_arg0, 41, 1728[_arg0]);
		1860[_arg0] = pev(_arg0, 80);
	}
	set_pev(_arg0, 73, pev(_arg0, 73) | 128);
	set_pev(_arg0, 89, 5);
	set_pev(_arg0, 43, 0);
	set_pev(_arg0, "USAGE", 4);
	set_pev(_arg0, 101, var2);
	set_pev(_arg0, 69, 0);
	set_pev(_arg0, 70, 0);
	set_pev(_arg0, 80, 0);
	276[_arg0] = 1;
	return 1;
}

public client_PreThink(_arg0)
{
	if (276[_arg0])
	{
		if (pev(_arg0, 81) & 1)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 1);
		}
		if (pev(_arg0, 81) & 2048)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 2048);
		}
		if (pev(_arg0, 81) & 2)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 2);
		}
		if (pev(_arg0, 81) & 4)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 4);
		}
		if (pev(_arg0, 81) & 8)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 8);
		}
		if (pev(_arg0, 81) & 16)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 16);
		}
		if (pev(_arg0, 81) & 32)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 32);
		}
		if (pev(_arg0, 81) & 64)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 64);
		}
		if (pev(_arg0, 81) & 128)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 2048);
		}
		if (pev(_arg0, 81) & 256)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 256);
		}
		if (pev(_arg0, 81) & 512)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 512);
		}
		if (pev(_arg0, 81) & 1024)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 1024);
		}
		if (pev(_arg0, 81) & 4096)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 4096);
		}
		if (pev(_arg0, 81) & 8192)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 8192);
		}
		if (pev(_arg0, 81) & 16384)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 16384);
		}
		if (pev(_arg0, 81) & 32768)
		{
			set_pev(_arg0, 81, pev(_arg0, 81) - 32768);
		}
	}
	return 0;
}

public client_connect(_arg0)
{
	276[_arg0] = 0;
	return 0;
}

public plugin_init()
{
	register_plugin("Admin Spectate", "0.1", "AMXX DoD Community");
	register_concmd("amx_spectate", "CmdSpectate", 8, "<name> - Do not provide a name to stop spectating");
	return 0;
}

public plugin_modules()
{
	require_module("ENGINE");
	require_module("FAKEMETA");
	return 0;
}

sub_204(_arg0, _arg1, _arg2, _arg3)
{
	new var2 = 0;
	new var1;
	if (is_dedicated_server())
	{
		var1 = 0;
	}
	else
	{
		var1 = 1;
	}
	if (var1 == _arg0)
	{
		var2 = 1;
	}
	else
	{
		if (_arg1 == 16777216)
		{
			if (sub_124(_arg0))
			{
				var2 = 1;
			}
		}
		if (_arg1 & get_user_flags(_arg0, "%L"))
		{
			var2 = 1;
		}
		if (_arg1 == 0)
		{
			var2 = 1;
		}
	}
	if (var2 == 0)
	{
		console_print(_arg0, "%L", _arg0, "NO_ACC_COM");
		return 0;
	}
	if (_arg3 > read_argc())
	{
		new var3 = 0;
		new var4 = 0;
		get_concmd(_arg2, var3, 31, _unused_temp_, var4, 127, _arg1, -1);
		console_print(_arg0, "%L:  %s %s", _arg0, "USAGE", var3, var4);
		return 0;
	}
	return 1;
}

sub_2eec(_arg0)
{
	if (276[_arg0] == 0)
	{
		client_print(_arg0, 2, "You weren't forced into spectator mode on somebody.");
		client_print(_arg0, 2, "Syntax: amx_spectate <name> - If no name is given, you will stop spectating.");
		return 0;
	}
	set_pev(_arg0, 43, 936[_arg0]);
	set_pev(_arg0, 73, 1596[_arg0]);
	set_pev(_arg0, "USAGE", 0);
	set_pev(_arg0, 101, 0);
	entity_set_origin(_arg0, 1068[_arg0]);
	set_pev(_arg0, 69, 672[_arg0]);
	set_pev(_arg0, 70, 540[_arg0]);
	set_pev(_arg0, 89, 408[_arg0]);
	set_pev(_arg0, 80, 1860[_arg0]);
	set_pev(_arg0, 41, 1992[_arg0]);
	276[_arg0] = 0;
	return 0;
}

sub_2ad0(_arg0)
{
	new var1;
	var1 = find_player("ahjl", _arg0);
	if (!var1)
	{
		var1 = find_player("bhjl", _arg0);
	}
	if (!var1)
	{
		var1 = find_player("chj", _arg0);
	}
	if (!var1)
	{
		var1 = find_player("dhj", _arg0);
	}
	if (!var1)
	{
		var1 = find_player("khj", _arg0);
	}
	if (!var1)
	{
		return -1;
	}
	return var1;
}

sub_2960(_arg0, _arg1, _arg2, _arg3)
{
	get_user_authid(_arg0, _arg1, 31);
	get_user_name(_arg0, _arg2, 31);
	get_user_ip(_arg0, _arg3, 15, 1);
	return 0;
}

sub_2d54(_arg0)
{
	new var1 = 1;
	while (get_maxplayers() >= var1)
	{
		if (is_user_connected(var1))
		{
			if (get_user_flags(var1, "%L") & 8)
			{
				client_print(var1, 3, _arg0);
			}
		}
		var1++;
	}
	return 0;
}

sub_124(_arg0)
{
	new var1;
	return get_user_flags(_arg0, "%L") > 0 && !get_user_flags(_arg0, "%L") & 33554432;
}

