Cristiano Ronaldo Publicado el 3 de Septiembre Compartir Publicado el 3 de Septiembre 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 Citar Enlace al comentario Compartir en otros sitios Mas opciones de compartir...
Publicaciones recomendadas
Unirse a la conversación
Puede publicar ahora y registrarse más tarde. Si tienes una cuenta, Regístrate para publicar con su cuenta.