Saltar al contenido

Rangos De Cs 1.6


Cristiano Ronaldo
 Compartir

Publicaciones recomendadas

Rango de cs 1.6 

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <sqlx>
#include <amx_settings_api>

#define PLUGIN  "Rangos - CS:GO"
#define VERSION "1.0"
#define AUTHOR  "Emanuelitop15"
#define iTAG    "^4[^1 Rango-$-GO^4 ]^1"
#define iINI    "lista_de_rangos.ini"

const UNIT_SECOND = (1<<12);

new Handle: sqlC, Handle: sqlTpl;

new const db_tabla[26] = "rangos_data_jugadores";

new const host[] = "local";
new const user[] = "";
new const pw[]   = "";
new const database[] = "RANGOS_CSGO_DATABASE";

enum _: _data_rangos { RANGO_NOMBRE[32], RANGO_EXP };

new bool: g_reg[MAX_PLAYERS+1], g_nombre[MAX_PLAYERS+1][MAX_NAME_LENGTH], g_rango[MAX_PLAYERS+1], g_exp[MAX_PLAYERS+1];
new g_msgscreenfade, g_msgscreenshake, g_sync;
new g_rango_maximo, RangosData[50][_data_rangos];
new Array: g_rangosN, Array: g_rangosE;
new cvar_efx_nivel, cvar_exp_per_kill, cvar_exp_per_kill_hs, cvar_espectear;

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

	cvar_efx_nivel = register_cvar("rangos_efecto_nivel", "1");
	cvar_exp_per_kill = register_cvar("rangos_exp_kill", "1");
	cvar_exp_per_kill_hs = register_cvar("rangos_exp_kill_en_cabeza", "2");
	cvar_espectear = register_cvar("rangos_poder_espectear_rangos", "1");

	g_msgscreenfade = get_user_msgid("ScreenFade");
	g_msgscreenshake = get_user_msgid("ScreenShake");

	RegisterHam(Ham_Killed, "player", "ham_JugadorAsesinado__pre");

	SQL__Init();

	g_sync = CreateHudSyncObj();
}

public plugin_precache()
{
	g_rangosN =  ArrayCreate(32, 1);
	g_rangosE = ArrayCreate(1, 1);
	RANGOS__Init();
}
RANGOS__Init()
{
	// Rangos por defecto si no hay en archivo .ini
	new const rangos_por_defecto[][] =\
	{ "Aprendiz", "Novato", "Recluta", "Francotirado", "Asesino", "Cazador", "Jefe de la tropa", "Especialista", "General", "Master" };
	new const rangos_por_defecto_exp[] =\
	{ 1, 25, 60, 130, 200, 280, 375, 450, 700, 1000 };

	if (!amx_load_setting_string_arr(iINI, "Rangos", "NOMBRES", g_rangosN))
	{
		new index;
		for (index = 0; index < sizeof (rangos_por_defecto); index++)
			ArrayPushString(g_rangosN, rangos_por_defecto[index]);
		
		amx_save_setting_string_arr(iINI, "Rangos", "NOMBRES", g_rangosN);
	}

	if (!amx_load_setting_int_arr(iINI, "Rangos", "EXP", g_rangosE))
	{
		new index;
		for (index = 0; index < sizeof (rangos_por_defecto_exp); index++)
			ArrayPushCell(g_rangosE, rangos_por_defecto_exp[index]);
		
		amx_save_setting_int_arr(iINI, "Rangos", "EXP", g_rangosE);
	}

	if (ArraySize(g_rangosN)) g_rango_maximo = ArraySize(g_rangosN);

	if (!g_rango_maximo)
	{
		log_amx("[rangos] No hay rangos cargados, intenta editando el archivo: %s", iINI);
		return;
	}

	new index, szstr[32];
	for (index = 0; index < g_rango_maximo; index++)
	{
		ArrayGetString(g_rangosN, index, szstr, 31);
		RangosData[index][RANGO_NOMBRE] = szstr;
		RangosData[index][RANGO_EXP] = ArrayGetCell(g_rangosE, index);
	}
}

SQL__Init()
{
	static buffer[121];

	if (!host[0] && !user[0], !pw[0])
	{
		new get_tipo[12]; SQL_SetAffinity("sqlite"); SQL_GetAffinity(get_tipo, sizeof (get_tipo));

		sqlTpl = SQL_MakeDbTuple("", "", "", database);

		if (!equali(get_tipo, "sqlite"))
		{
			log_to_file("SQLITE_ERROR.txt", "Error de conexion");
			pause("a");
			return;
		}
	}
	else sqlTpl = SQL_MakeDbTuple(host, user, pw, database);

	if (!sqlTpl) 
	{
		formatex(buffer,charsmax(buffer),"[SQL] No se pudo conectar con la BASE DE DATOS!");
		log_amx(buffer);
		pause("a");
		return;
	}

	new error, szerror[221];
	sqlC = SQL_Connect(sqlTpl, error, szerror, charsmax(szerror));

	if (sqlC == Empty_Handle)
	{
		formatex(buffer, charsmax(buffer), "[SQL: Error Conexion]:  %s", szerror);
		log_amx(buffer);
		pause("a");
		return;
	}

	set_creacion_de_tablas();
}

set_creacion_de_tablas()
{
	new szdata[512];

	format(szdata, charsmax(szdata), "CREATE TABLE IF NOT EXISTS %s (\
		                             Nombre varchar(64) NOT NULL UNIQUE, \
		                             RangoNum int NOT NULL DEFAULT '0', \
		                             Exp int NOT NULL DEFAULT '0' \
		                             )", db_tabla);

	new Handle: Query;
	Query = SQL_PrepareQuery(sqlC, szdata);
			
	if (!SQL_Execute(Query))
	{
		SQL_ERROR(Query, "set_creacion_de_tablas()");
		return;
	}

	SQL_FreeHandle(Query);
}

public client_disconnected(id)
	guardar_datos(id);

public client_putinserver(id)
{
	get_user_name(id, g_nombre[id], 31);
	//get_user_authid(id, g_authid[id], 40);
	//if (contain(g_authid[id], "ID") != -1 || contain(g_authid[id], "VALVE") != -1) get_user_ip(id, g_authid[id], 40);
	
	g_reg[id] = false;
	g_rango[id] = 0;
	g_exp[id] = 0;

	if (!is_user_bot(id))
		set_task(0.6, "cargar_datos_pre", id);
}
public cargar_datos_pre(id)
{
	cargar_datos_post(id);
}

//-----------------------------------------------------------------------------------------
//-------------------------------- SQLITE - GUARDADO/CARGADO-------------------------------
//-----------------------------------------------------------------------------------------
cargar_datos_post(id)
{
	new Handle: Query;
	Query = SQL_PrepareQuery(sqlC, "SELECT * FROM %s WHERE `Nombre` = ^"%s^"", db_tabla, g_nombre[id]);
			
	if (!SQL_Execute(Query))
	{
		SQL_ERROR(Query, "cargar_datos_post(id)");
		return;
	}

	if (SQL_NumResults(Query))
	{
		g_reg[id] = true;

		g_rango[id] = SQL_ReadResult(Query, 1);
		g_exp[id] = SQL_ReadResult(Query, 2);

		#if defined LOG_TESTEO
		client_print_color(id, 0, "Datos cargados correctamente!. Tu rango es:^4 %s^1", RangosData[ g_rango[id] ][RANGO_NOMBRE]);
		#endif

		set_task(0.5, "HudInfo", id+2555, _,_, "b");
	}
	else
	{
		#if defined LOG_TESTEO
		client_print_color(id, 0, "Te estas^4 registrando^1 en la base de datos. ^4Espera^3 unos segundos^1 !");
		#endif

		agregar_jugador(id);
	}

	SQL_FreeHandle(Query);
}

agregar_jugador(id)
{
	new Handle: Query;
	Query = SQL_PrepareQuery(sqlC, "SELECT * FROM %s WHERE `Nombre` = ^"%s^"", db_tabla, g_nombre[id]);
			
	if (!SQL_Execute(Query))
	{
		SQL_ERROR(Query, "agregar_jugador(id)");
		return;
	}
	else if (!SQL_NumResults(Query))
	{
		SQL_FreeHandle(Query);

		Query = SQL_PrepareQuery(sqlC, "INSERT INTO %s (Nombre) VALUES (^"%s^")", db_tabla, g_nombre[id]);

		if (!SQL_Execute(Query))
		{
			SQL_ERROR(Query, "agregar_jugador(id)");
			return;
		}

		SQL_FreeHandle(Query);
	}

	g_reg[id] = true;
	set_task(0.5, "HudInfo", id+2555, _,_, "b");

	#if defined LOG_TESTEO
	client_print_color(id, 0, "Has sido registrado en la^4 base de datos^1 exitosamente!");
	#endif
}

guardar_datos(id)
{
	if (!is_user_connected(id) || !g_reg[id]) return;

	new Handle: Query;
	Query = SQL_PrepareQuery(sqlC, "UPDATE %s SET RangoNum = '%d', Exp = '%d' WHERE `Nombre` = ^"%s^"", db_tabla, g_rango[id], g_exp[id], g_nombre[id]);
			
	if (!SQL_Execute(Query))
	{
		SQL_ERROR(Query, "guardar_datos(id)");
		return;
	}

	SQL_FreeHandle(Query);
}
//-----------------------------------------------------------------------------------------

public ham_JugadorAsesinado__pre(victima, id)
{
	if (!is_user_connected(id))
		return HAM_IGNORED;

	if (id == victima)
		return HAM_IGNORED;

	static rewardXP;
	if (get_pdata_int(victima, 75) == HIT_HEAD)	
		rewardXP = get_pcvar_num(cvar_exp_per_kill_hs);
	else
		rewardXP = get_pcvar_num(cvar_exp_per_kill);

	ExpUsuario(id, "+", .cantidad = rewardXP);	
	return HAM_IGNORED;
}

public event_round_start()
{
	new id;
	for (id = 1; id <= MAX_PLAYERS; id++)
		guardar_datos(id);
}

ExpUsuario(id, const valor[2] = "=", cantidad = 0)
{
	if (!is_user_connected(id))
		return PLUGIN_HANDLED;

	if (cantidad == 0) g_exp[id] = cantidad;
	else
	{
		switch (valor[0])
		{
			case '+': g_exp[id] += cantidad;
			case '-': g_exp[id] -= cantidad;
			default: g_exp[id] = cantidad; 
		}
	}	

	static rango; rango = g_rango[id];	

	while (!ExpRestanteSigRango(id) && rango < (g_rango_maximo - 1))
		g_rango[id]++;
	
	while (rango > 0 && g_exp[id] <= RangosData[rango-1][RANGO_EXP])
		g_rango[id]--;
		
	if (g_rango[id] > rango)
	{
		//client_cmd(id, "spk ^"%s^"", sound);
		client_print_color(id, 0, "%s Obtienes un nuevo rango:^4 %s^1.", iTAG, RangosData[ g_rango[id] ][RANGO_NOMBRE]);

		if (get_pcvar_num(cvar_efx_nivel))
		{
			set_fade(id, 2, 1, {180, 180, 250}, 220);
			set_shake(id, 8, 3, 20);

			set_dhudmessage(200, 200, 0, -1.0, 0.60, 2, 2.0, 3.0, 0.04, 0.1);
			show_dhudmessage(id, "Subiste al rango: %s", RangosData[ g_rango[id] ][RANGO_NOMBRE]);
		}
	}
	else if (g_rango[id] < rango)
	{
		client_print_color(id, 0, "%s Bajaste de rango:^4 %s^1.", iTAG, RangosData[ g_rango[id] ][RANGO_NOMBRE]);

		if (get_pcvar_num(cvar_efx_nivel))
		{
			set_fade(id, 2, 1, {200, 0, 0}, 220);
			set_shake(id, 8, 3, 20);

			set_dhudmessage(200, 0, 0, -1.0, 0.60, 2, 2.0, 3.0, 0.04, 0.1);
			show_dhudmessage(id, "Bajaste al rango: %s", RangosData[ g_rango[id] ][RANGO_NOMBRE]);
		}
	}	

	guardar_datos(id);
	return PLUGIN_HANDLED;	
} 

public HudInfo(id)
{
	id -= 2555;

	if (!is_user_connected(id))
	{
		remove_task(id);
		return;
	}

	new iObjetivo, espectador_id; espectador_id = 0;

	if (!is_user_alive(id))
	{
		if (!get_pcvar_num(cvar_espectear)) return;
		
		espectador_id = pev(id, pev_iuser2);
		if (!is_user_alive(espectador_id)) return;
	}

	iObjetivo = (!espectador_id) ? id : espectador_id;

	new sztxt[231], rgb[3];

	if (get_user_team(iObjetivo) == 1) rgb = { 255, 15, 0 };
	else rgb = { 180, 180, 250 };

	if (g_rango[iObjetivo] >= g_rango_maximo-1)
	{
		format(sztxt, charsmax(sztxt), "-=  Exp: COMPLETADO  -=^n\
			                            -=  Rango: %s - Proximo: MAXIMO  -=", RangosData[ g_rango[iObjetivo] ][RANGO_NOMBRE])
	}
	else
	{
		format(sztxt, charsmax(sztxt), "-=  Exp: %d - Restante: %d  =-^n\
			                            -=  Rango: %s - Proximo: %s  -=", g_exp[iObjetivo], ExpRestanteSigRango(iObjetivo), RangosData[ g_rango[iObjetivo] ][RANGO_NOMBRE], RangosData[ g_rango[iObjetivo]+1 ][RANGO_NOMBRE])
	}

	set_hudmessage(rgb[0], rgb[1], rgb[2], -1.0, !espectador_id ? 0.11 : 0.15, 0, 6.0, 0.6, 0.1, 0.2, -1);
	ShowSyncHudMsg(id, g_sync, sztxt);
}

ExpRestanteSigRango(id)
{
	new exp = g_exp[id];
	new rango = g_rango[id];
	new iRestante = (RangosData[rango][RANGO_EXP] - exp);

	return clamp(iRestante, 0, RangosData[rango][RANGO_EXP]);
}

SQL_ERROR(Handle: query, const funcion[], const j[] = "")
{
	static error[56]; SQL_QueryError(query, error, 55);
        
	if (!strlen(j))
		log_to_file("SQL_ERROR.txt", "[Funcion: %s] Error: '%s'", funcion, error);
	else
		log_to_file("SQL_ERROR.txt", "[Jugador: %s][Funcion: %s] Error: '%s'", j, funcion, error);

	SQL_FreeHandle(query);
}

stock set_fade(id = 0, tiempo = 1, ffade_in_out = 1, rva[3], brillo = 100)
{
	if (id) message_begin(MSG_ONE_UNRELIABLE, g_msgscreenfade, _, id);
	else message_begin(MSG_BROADCAST, g_msgscreenfade);
	
	write_short(UNIT_SECOND * tiempo);
	write_short(0);
	write_short(ffade_in_out ? 0x0000 : 0x0004);
	write_byte(rva[0]);
	write_byte(rva[1]);
	write_byte(rva[2]);
	write_byte(brillo);
	message_end();
}

stock set_shake(id = 0, amplitud = 8, duracion = 4, frecuencia = 20) 
{
	if (id) message_begin(MSG_ONE_UNRELIABLE, g_msgscreenshake, _, id);
	else message_begin(MSG_BROADCAST, g_msgscreenshake);

	write_short(UNIT_SECOND * amplitud);
	write_short(UNIT_SECOND * duracion); 
	write_short(UNIT_SECOND * frecuencia); 
	message_end();
}

public plugin_end()
{
	SQL_FreeHandle(sqlTpl);
	SQL_FreeHandle(sqlC);
}

 

 

Lo pueden editar a su manera 

Creado por Emanuel15

Enlace al comentario
Compartir en otros sitios

Unirse a la conversación

Puede publicar ahora y registrarse más tarde. Si tienes una cuenta, Regístrate para publicar con su cuenta.

Visitante
Responder a este tema...

×   Pegado como texto enriquecido.   Pegar como texto sin formato en su lugar

  Solo se permiten 75 emoticones como máximo.

×   Su enlace se ha incrustado automáticamente.   Mostrar como un enlace en su lugar

×   Su contenido anterior ha sido restaurado.   Eliminar caché del editor

×   No puede pegar imágenes directamente. Debe cargar o insertar imágenes desde una URL.

 Compartir

×
×
  • Crear nuevo...