Ir al contenido
  • Crear una cuenta

[TUT] Variables, y Mysql insertando y cargando datos


SpaM #P.Kreedz

Posts recomendados

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 :3

Que hace este plugin ademas de ser un tutorial :P?

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 jugador
Podes 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

  • Me gusta 2
Enlace al comentario
Compartir en otros sitios

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

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

  • 2 semanas después...

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

Invitado
Este tema se encuentra cerrado a nuevas respuestas.
  • Navegando Recientemente   0 miembros

    • No hay usuarios registrados viendo esta página
×
×
  • Crear nuevo...