SpaM #P.Kreedz Publicado 1 de agosto del 2014 Denunciar Compartir Publicado 1 de agosto del 2014 Dewe gay. #include <amxmodx>#include <amxmisc>#include <sqlx>// Vamos a definir cuales son nuestros datos para conectarnosnew MYSQL_HOST[] = "localhost" // Host donde esta alojada la base de datos, en mi caso en localhost (Local = mipc)new MYSQL_USER[] = "root" // Usuario de la base de datosnew MYSQL_PASS[] = "" // Contraseña (?)new MYSQL_DB[] = "ngamers" // Esta va a ser la base de datos en donde se va a crear la tabla "mensajitos"new MYSQL_TABLE[] = "mensajitos_mysql" // tabla en donde se van a guardar los datosnew gHud // Seria como el ID de la sincronizacion del hud. Si queremos mostrar 2 huds diferentes, con este identificador, solo se mostrara 1new Handle:g_SqlTuple // mysql connection, el identificador de la conexion/*Variable global booleanaEs decir, que esta variable va a tener los siguientes valoresg_type = 0 o g_type = 1g_type = false o g_type = trueEsta variable global la vamos a usar para chequear si vamos a mandar un mensajevia chat o hudg_type = 0 | Mensajes en sayg_type = 1 | Mensajes en hudej: if(g_type) Verdadero = 1 else Falso = 0*/new g_type/*Esta variable global, va a setearle un efecto al hud*Puede ser del 0 al 2 (si no me equivoco, no me acuerdo)0 = normal1 = Parpadeo / titileo2 = Aparecen las letras de izquierda a derecha, letra por letra*/new g_effect/*String de 250 celdas que vamos a usar para guardar nuestro mensaje*/new g_msj[250]/*Variable global con un arrayg_hud_pos[x] = X equilave al numero de grupos del arrayEn nuestro caso, tenemos 2 gruposnew Float:g_hud_pos[2];Ahora vamos a asignarle un numero de grupo a cada varariableg_hud_pos[0] = posicion X del hud, en numero flotante/float (Ej 0.4) - (Para mover el hud, izquierda-derecha)g_hud_pos[1] = Posicion Y del hud, en numero flotante/float (Ej 0.8) - (Para mover el hud, arriba-abajo)Como vieron, empieza desde el 0 para adelanteSiempre es el numero de variables que queremos usar, +1Como usar:new g_array[5]g_array[0]g_array[1]g_array[2]g_array[3]g_array[4]Como no usar:new g_array[5] // Yo aca por ejemplo, tengo 3 grupos, +1g_array[0]g_array[1]g_array[2]g_array[3]g_array[4]g_array[5] // Limite excedidoError: Array index out of bounds (variable "g_array")*/new Float:g_hud_pos[2];/*Variable global flotante, la vamos a usarpara definir cuanto tiempo va a estar el hud en pantall*/new Float:g_hud_time/*Variable global flotante, la vamos a usar para definircada cuanto tiempo le va a salir el mensaje al jugador*/new Float:g_nextmsj;/*Lo explique un poco mas arribag_color[0] = redg_color[1] = greeng_color[2] = bluePara darle colorcito al hud */new g_color[3]new buffer[550] // String de 550 celdas, lo vamos a usar para cargar nuestro mensaje, y mostrarlo en el hud/chat/*No se como explicarlo muy bienSeria el identificador del set_taskset_task(g_nextmsj, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")set_task(Segundos para llamar a la funcion, "funcion_a_llamar", id-player+IDENTIFICADOR-DEL-TASK, const parameter[]="", len = 0, "flag")*/const TASK_SHOWHUD = 9325; // El numero no es siempre el mismo#define ID_SHOWHUD ( taskid - TASK_SHOWHUD )public plugin_init() { register_plugin( "Mensajes SQL", "2.0", "SpaM" ) // Ea (? Registramos el plugin e.e /* Registramos este evento para que, al empezar la ronda, haga una conexion con la base de datos, y cargar los datos que hay insertados en la tabla, para actualizar los datos del hud. */ register_event("HLTV", "event_round_start", "a", "1=0", "2=0") /*El CreateHudSyncObj() se usa para crear el hud/sincronizarlo, y luego mostrarlo con ShowSyncHudMsg Ejemplo ShowSyncHudMsg(id, gHud, "Dewe is gay") */ gHud = CreateHudSyncObj() MYSQL_Init() // Conectamos a la base de datos}public event_round_start(){ MYSQL_Init() // Termina la ronda, cargamos/actualizamos datos. Si la base de datos esta creada, pero no la tabla, la misma se crea sola.}public MYSQL_Init(){ new g_Error[512], g_query[843], g_motd[1524], len; len = 0 // Celdas - longitudes /* Conectamos a la base de datos SQL_MakeDbTuple("IP", "Usuario", "Contraseña", "Base de datos" ) */ g_SqlTuple = SQL_MakeDbTuple(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB ) // Chequeamos si estamos conectados a la base de datos if (!g_SqlTuple) // En este caso, si g_SqlTuple, devuelve false (falso) { // Mandamos un logs para avisar de que fracaso la conexion log_to_file("MYSQL_ERROR.txt", "No se pudo conectar con la base de datos.") // Pausamos el plugin return pause("a"); } new ErrorCode, Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, g_Error, charsmax(g_Error)) // Estamos conectados a la base de datos /* Si no existe la tabla, se la creamos, y le definimos los datos */ /* Vamos a usar INT para guardar/cargar numeros INT: Un entero de 4 bytes; el rango con signo es de 2147483648 a 2147483647 El rango sin signo es de 0 a 4294967295 Vamos a usar VARCHAR para guardar/cargar letras/numeros: VARCHAR: Cadena de longitud variable (0-65, 535), la longitud maxima esta asociada al tamaño maximo de un registro Vamos a usar FLOAT para guardar numeros flotantes (floats) FLOAT: Un número de coma flotante pequeño, los valores posibles son de -3.402823466E+38 a -1.175494351E-38 y de 1.175494351E-38 a 3.402823466R+28 */ len += formatex(g_motd[len], charsmax(g_motd) - len, "CREATE TABLE IF NOT EXISTS `%s`(", MYSQL_TABLE) len += formatex(g_motd[len], charsmax(g_motd) - len, "`Type` int(1) NOT NULL DEFAULT '1', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Msj` varchar(150) NOT NULL, ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Pos X` float NOT NULL DEFAULT '0.4', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Pos Y` float NOT NULL DEFAULT '0.8', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Tit` int(1) NOT NULL DEFAULT '1', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Time` float NOT NULL DEFAULT '15.0', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Red` int(3) NOT NULL DEFAULT '0', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Green` int(3) NOT NULL DEFAULT '240', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Blue` int(3) NOT NULL DEFAULT '100', ") len += formatex(g_motd[len], charsmax(g_motd) - len, "`Nextspam` float NOT NULL DEFAULT '15.0')") /* Vamos a ejecutar la query/consulta para crear las tablas */ SQL_ThreadQuery(g_SqlTuple, "QueryCreateTable", g_motd) // Si estamos conectados a la base de datos if (SqlConnection != Empty_Handle) { /*Preparamos la consulta, y seleccionamos los datos a cargar SELECT * FROM, se usa para seleccionar TODOS los datos que esten guardados en la tabla seleccionada */ new Handle:query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM `%s`", MYSQL_TABLE) /* Ejecutamos la consulta Y cargamos datos */ SQL_Execute(query) if (SQL_NumResults(query)) { /* Una vez la consulta/query ejecutada y en proceso Seleccionamos los datos (Casi siempre empieza desde el 0 en adelante) y le asignamos el valor obtenido de la columna, a la variable */ g_type = SQL_ReadResult(query, 0) // Leemos y cargamos la columna n0 (Type), y le seteamos el valor a g_type SQL_ReadResult(query, 1, buffer, charsmax(buffer)) // Leemos y cargamos la columna n1 (Msj), y le seteamos el valor/string a buffer (aca guardaremos nuestro mensaje) /*Cuando creamos el array, pusimos para que sea un array flotante. En este caso, para leer los valores (flotantes) de las columnas "Pos X" y "Pos Y" tenemos que poner que el array es flotante, y hacerlo de esta forma */ SQL_ReadResult(query, 2, Float:g_hud_pos[0])// Leemos y cargamos la columna n2 (Pos X), y le seteamos el valor a g_hud_pos[0] SQL_ReadResult(query, 3, Float:g_hud_pos[1])// Leemos y cargamos la columna n3 (Pos Y), y le seteamos el valor a g_hud_pos[1] g_effect = SQL_ReadResult(query, 4) // Leemos y cargamos la columna n4 (Tit), y le seteamos el valor a g_effect SQL_ReadResult(query, 5, Float:g_hud_time) // Leemos y cargamos la columna n5 (Time), y le seteamos el valor flotante a g_hud_time g_color[0] = SQL_ReadResult(query, 6) // Leemos y cargamos la columna n6 (Red), y le seteamos el valor a g_color[0] g_color[1] = SQL_ReadResult(query, 7) // Leemos y cargamos la columna n7 (Green), y le seteamos el valor a g_color[1] g_color[2] = SQL_ReadResult(query, 8) // Leemos y cargamos la columna n8 (Blue), y le seteamos el valor a g_color[2] SQL_ReadResult(query, 9, Float:g_nextmsj) // Leemos y cargamos la columna n9 (Nextspam), y le seteamos el valor a g_nextmsj copy(g_msj, charsmax(g_msj[]), buffer) // El mensaje cargado en buffer, va a ser copiado en g_msj (? } else { // Si no hay datos en la tabla, se los insertamos formatex(g_query,charsmax(g_query), "INSERT INTO `%s` (`Type`, `Msj`, `Pos X`, `Pos Y`, `Tit`, `Time`, `Red`, `Green`, `Blue`, `Nextspam`) VALUES ('1', 'Open fire gordon, open fire!', '0.4', '0.8', '1', '2.5', '200', '100', '100', '15.0')", MYSQL_TABLE) SQL_ThreadQuery(g_SqlTuple, "IgnoreHandle", g_query) // Cerramos/liberamos la consulta } SQL_FreeHandle(query) // Cerramos/liberamos la consulta } return PLUGIN_CONTINUE;}// Chequeamos la consultapublic QueryCreateTable(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize){ /*Si la query/consulta esta mal Mandamos un log */ switch (FailState) { case TQUERY_CONNECT_FAILED: log_to_file("SQL_LOG_TQ.txt", "Failed to connect to database [%i]: %s", Errorcode, Error) case TQUERY_QUERY_FAILED: log_to_file("SQL_LOG_TQ.txt", "Error on query for creating table [%i]: %s", Errorcode, Error) } return PLUGIN_HANDLED;}public IgnoreHandle(FailState, Handle:Query, Error[], Errcode, Data[], DataSize){ SQL_FreeHandle(Query) // Cerramos/liberamos la consulta return PLUGIN_HANDLED;}/*client_putinserver se llama cuando el jugador esta entrando al servidorAntes de que termine el cartelito de "cargando"*/public client_putinserver(id){ /* Ya lo explique mas arriba (? Al Al jugador que se esta conectado, le seteamos el task, que es lo que va a llamar a la funcion "ShowHUD", dependiendo de cuanto tiempo este definida la variable g_nextmsk g_nextmsk, tambien es lo que va a definir cada cuanto tiempo le va a salir el mensaje al jugador */ set_task(g_nextmsj, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")}public client_disconnect(id){ // Cuando el jugador se desconecta, le removemos el task remove_task(id+TASK_SHOWHUD)}public ShowHUD(taskid) // taskid = identificador del task{ static id id = ID_SHOWHUD; // identificador del usuario if(!g_type) // False = 0 { // Mensaje solo en el say client_print(id, print_chat, "%s", buffer) } else // True = 1 { // Le seteamos las propiedades que cargamos, al hud que vamos a mostrar set_hudmessage(g_color[0], g_color[1], g_color[2], g_hud_pos[0], g_hud_pos[1], g_effect, 5.0, g_hud_time, 1.0, 1.0, -1) //set_hudmessage(red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2,channel=4); ShowSyncHudMsg(id, gHud, "%s", buffer) // Le mostramos el hud con el mensaje al jugador }}// Ni ganas de explicar este stock peruano (?stock color_chat(const id, const input[], any:...){ new count = 1, players[32] static msg[191] vformat(msg, 190, input, 3) replace_all(msg, 190, "!g", "^4"); // Green Color replace_all(msg, 190, "!y", "^1"); // Default Color replace_all(msg, 190, "!team", "^3"); // Team Color replace_all(msg, 190, "!team2", "^0"); // Team2 Color if (id) players[0] = id; else get_players(players, count, "ch") { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) write_byte(players[i]); write_string(msg); message_end(); } } }} Si ven algo que esta mal echo/explicado, diganme :3Que hace este plugin ademas de ser un tutorial ?Lo que hace es, guardar en la base de datos, los datos de un hud a mostrar.El mensaje se le va a mandar cada X tiempo a cada jugadorPodes conectar todos los servidores a la misma base de datos, y mandar el mismo mensaje a todos los servidores.AVISO:La base de datos tiene que estar en la misma PC que el servidor.Si la base de datos esta alojada en otra PC, tienen que fijarse que acepte conexiones remotas (no todas aceptan conexiones remotas).Para la base de datos, pueden usar xamp, o appserver Im Author y Javitox! reaccionaron a esto 2 Enlace al comentario Compartir en otros sitios More sharing options...
Im Author Publicado 1 de agosto del 2014 Denunciar Compartir Publicado 1 de agosto del 2014 Aclará que si usan MYSQL, la DB, o la tienen que comprar (LOCALSTRIKE) o tienen que hacerla desde alguna PAG. gratis... PD: Conste que no leí un corno porque no lo necesito, pero dentro de todo... está bien. Enlace al comentario Compartir en otros sitios More sharing options...
shiobi Publicado 5 de agosto del 2014 Denunciar Compartir Publicado 5 de agosto del 2014 Aclará que si usan MYSQL, la DB, o la tienen que comprar (LOCALSTRIKE) o tienen que hacerla desde alguna PAG. gratis... PD: Conste que no leí un corno porque no lo necesito, pero dentro de todo... está bien. Eso es redundante. Si querés manejar algo con sistema de base de datos es obvio que necesitás una base de datos antes. Enlace al comentario Compartir en otros sitios More sharing options...
Angelical Power Publicado 5 de agosto del 2014 Denunciar Compartir Publicado 5 de agosto del 2014 (editado) Que bobo soy, no me di cuenta jaja Editado 5 de agosto del 2014 por Angelical Power Enlace al comentario Compartir en otros sitios More sharing options...
Misaki Publicado 5 de agosto del 2014 Denunciar Compartir Publicado 5 de agosto del 2014 JAJJAJAJAJAJ y si ese es el JAJAJJAJAJAJ Enlace al comentario Compartir en otros sitios More sharing options...
SpaM #P.Kreedz Publicado 5 de agosto del 2014 Autor Denunciar Compartir Publicado 5 de agosto del 2014 Yo sabia que esto es C&P, http://amxmodx-es.com/Thread-TUT-Mysql-variables ,Seguro no podes explicar ni 3/4 de ese code. "scripter"... Para tu info yo soy ipolito Saludos "kev1" shiobi y Angelical Power reaccionaron a esto 2 Enlace al comentario Compartir en otros sitios More sharing options...
Javitox! Publicado 5 de agosto del 2014 Denunciar Compartir Publicado 5 de agosto del 2014 e.e Chinagirl, agux+ y shiobi reaccionaron a esto 3 Enlace al comentario Compartir en otros sitios More sharing options...
Im Author Publicado 6 de agosto del 2014 Denunciar Compartir Publicado 6 de agosto del 2014 Eso es redundante. Si querés manejar algo con sistema de base de datos es obvio que necesitás una base de datos antes. Hay pelotudos que agarran, copian y pegan y a la mierda, piensan que está solucionado, o por ejemplo tenés el HNS XP MOD 2.0 posteado de MV que está en MYSQL (y más bugueado que la concha del mono) y muchos piensan que copiando el code, compilando y usándolo ya anda... Enlace al comentario Compartir en otros sitios More sharing options...
Mario AR. Publicado 15 de agosto del 2014 Denunciar Compartir Publicado 15 de agosto del 2014 Que bobo soy, no me di cuenta jaja Eres feo aquí, no eres Super Mario ¬¬ Enlace al comentario Compartir en otros sitios More sharing options...
shiobi Publicado 15 de agosto del 2014 Denunciar Compartir Publicado 15 de agosto del 2014 Hay pelotudos que agarran, copian y pegan y a la mierda, piensan que está solucionado, o por ejemplo tenés el HNS XP MOD 2.0 posteado de MV que está en MYSQL (y más bugueado que la concha del mono) y muchos piensan que copiando el code, compilando y usándolo ya anda... Y esos jugadores no son aptos para manejar una comunidad. Enlace al comentario Compartir en otros sitios More sharing options...
Im Author Publicado 15 de agosto del 2014 Denunciar Compartir Publicado 15 de agosto del 2014 Son boludos y no tienen huevos, corta Enlace al comentario Compartir en otros sitios More sharing options...
Dazrep! 4u Publicado 15 de agosto del 2014 Denunciar Compartir Publicado 15 de agosto del 2014 Desvirtuan todo siempre en la seccion de AMX Mod, y lo peor es que me caen todos mal, ponelé. Cierro Enlace al comentario Compartir en otros sitios More sharing options...
Posts recomendados