Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Creador Automatico de Rejas (By GROVE4L)

Iniciado por Swarlog, May 13, 2025, 06:27 PM

Tema anterior - Siguiente tema

Swarlog

Información Adicional:

Se trata de un sistema de creación de rejas dentro del servidor mediante el uso de comandos. De este modo no tendremos que crearlas o modificar las rejas mediante el editor. Muy util, recomendable.

Código:

//------------------------------------------------------//
//------------------------------------------------------//
//------------------------------------------------------//
/*
		+-------------------------------------+
		|                                     |
		|          Creador de Rejas           |
		|            Por GROVE4L              |
		|                                     |
		+-------------------------------------+

*/
//------------------------------------------------------//
//------------------------------------------------------//
//------------------------------------------------------//

#include <a_samp>

new Float:POS[3];
new RejaCreando[2];
new TT[MAX_PLAYERS];
new PASOS[MAX_PLAYERS];
new MueveORota[MAX_PLAYERS];
new Vista[MAX_PLAYERS];
new EstaViendo[MAX_PLAYERS];
new TRotar;
new Float: VP[3];
new Variable = 99;
new Float: POSOR[3];
new RejaV;

public OnPlayerCommandText(playerid, cmdtext[])
{
	if(strcmp("/crearpuerta", cmdtext, true, 10) == 0)
	{
	    if(PASOS[playerid] == 0)
	    {
	    	TogglePlayerControllable(playerid,0);
			ShowPlayerDialog(playerid,650,DIALOG_STYLE_MSGBOX,"Creador de Rejas - GROVE4L","Bienvenido al creador de rejas. FS creador por GROVE4L.\nPara empezar, primero ubique la reja en la\nposicion de reja CERRADA.","Continuar","Salir");
			return 1;
		}
	}
	return 0;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == 650)
	{
	    if(response)
	    {
	        PASOS[playerid] = 1;
			GetPlayerPos(playerid,POS[0],POS[1],POS[2]);
			GetXYInFrontOfPlayer(playerid,POS[0],POS[1],8);
			DestroyObject(RejaCreando[0]);
			RejaCreando[0] = CreateObject(969,POS[0],POS[1],POS[2],0.0,0.0,0.0);
			RejaV = 1;
			ShowPlayerDialog(playerid,651,DIALOG_STYLE_LIST,"Opciones Rejas","Cambiar Objecto\nMover Objeto\nCambiar Rotacion\nVisualizar\nCrear Reja Abierta\nFinalizar","Selecc.","Salir");
			
		}
		else
		{
			PASOS[playerid] = 0;
			EstaViendo[playerid] = 0;
			KillTimer(TT[playerid]);
			KillTimer(TRotar);
			MueveORota[playerid] = 0;
			Variable = 99;
			TogglePlayerControllable(playerid,0);
			return 1;
		}
	}
	if(dialogid == 651)
	{
	    if(response)
	    {
	    	if(listitem == 0)
	    	{
	    	    EstaViendo[playerid] = 1;
	    	    ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"Cambiando Objeto","Precione las flechas para elejir otro objeto.\nPulsa Enter para abrir el menu.","OK","Salir");
	            GetObjectPos(RejaCreando[0],VP[0],VP[1],VP[2]);
	            GetObjectRot(RejaCreando[0],POSOR[0],POSOR[1],POSOR[2]);
	            DestroyObject(RejaCreando[0]);
                TT[playerid] = SetTimerEx("Teclas", 75, 1, "i", playerid);
	            Variable = 1;
	    	    return 1;
			}
			else if(listitem == 1)
			{
			    MueveORota[playerid] = 1;
			    ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"Moviendo Objeto","Precione las flechas para mover el objeto.\nDisparar y Apuntar para la altura del objeto.\nPulsa Enter para abrir el menu.","OK","Salir");
			    TT[playerid] = SetTimerEx("Teclas", 75, 1, "i", playerid);
			}
			else if(listitem == 2)
			{
			    MueveORota[playerid] = 2;
			    TogglePlayerControllable(playerid,0);
			    ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"Rotando Objeto","Precione las flechas para rotar el objeto.\nDisparar y Apuntar para rotar el objeto.\nPulsa Enter para abrir el menu.","OK","Salir");
			    TT[playerid] = SetTimerEx("Teclas", 75, 1, "i", playerid);
			}
			else if(listitem == 3)
			{
			    Vista[playerid] = 1;
			    TogglePlayerControllable(playerid,1);
			    ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"Visualizando","Muevete normalmente para verificar la posicion de la reja.\nPulsa Enter para abrir el menu.","OK","Salir");
			}
			else if(listitem == 4)
			{
			    GetObjectPos(RejaCreando[0],VP[0],VP[1],VP[2]);
			    GetObjectRot(RejaCreando[0],POSOR[0],POSOR[1],POSOR[2]);
                if(RejaV == 1)
	            {
	            	RejaCreando[1] = CreateObject(969,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				else if(RejaV == 2)
	            {
	            	RejaCreando[1] = CreateObject(971,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				else if(RejaV == 3)
	            {
	            	RejaCreando[1] = CreateObject(975,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				else if(RejaV == 4)
	            {
	            	RejaCreando[1] = CreateObject(976,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				else if(RejaV == 5)
	            {
	            	RejaCreando[1] = CreateObject(989,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				else if(RejaV == 6)
	            {
	            	RejaCreando[1] = CreateObject(980,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
				}
				TT[playerid] = SetTimerEx("Teclas", 75, 1, "i", playerid);
				PASOS[playerid] = 2;
    			ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"Reja Abierta","El nuevo objeto fue creado.\nAbra el menu con Enter y seleccione las opciones.","OK","Salir");
				return 1;
			}
			else if(listitem == 5)
			{
				ShowPlayerDialog(playerid,652,DIALOG_STYLE_INPUT,"Guardado de reja - GROVE4L","Escribe con que nombre se guardara la reja","Guardar","Salir");
			    return 1;
			}
		}
		else
		{
		    PASOS[playerid] = 0;
			EstaViendo[playerid] = 0;
			KillTimer(TT[playerid]);
			KillTimer(TRotar);
			MueveORota[playerid] = 0;
			Variable = 99;
			TogglePlayerControllable(playerid,0);
		}
	}
	if(dialogid == 652)
	{
	    if(response)
	    {
	        new string[256];
	        format(string, sizeof(string), "GRejas/%s.txt", inputtext);
			new File: hFile = fopen(string, io_write);
			new Float:POSG[6],Float:ROTG[6];
			new NString;
			GetObjectPos(RejaCreando[0],POSG[0],POSG[1],POSG[2]);
			GetObjectPos(RejaCreando[1],POSG[3],POSG[4],POSG[5]);
			
			GetObjectRot(RejaCreando[0],ROTG[0],ROTG[1],ROTG[2]);
			GetObjectRot(RejaCreando[1],ROTG[3],ROTG[4],ROTG[5]);
			DestroyObject(RejaCreando[0]);
			DestroyObject(RejaCreando[1]);
			if(RejaV == 1) NString = 969;
			else if(RejaV == 2) NString = 971;
			else if(RejaV == 3) NString = 975;
			else if(RejaV == 4) NString = 976;
			else if(RejaV == 5) NString = 989;
			else if(RejaV == 6) NString = 980;
			
			if(hFile)
			{
			    new var[200];
			    format(var, 200, "Agregar Arriba de Todo\r\n");fwrite(hFile, var);
			    format(var, 200, "new Reja1;\r\n");fwrite(hFile, var);
			    format(var, 200, " \r\n");fwrite(hFile, var);
			    format(var, 200, "Agregar en OnGameModeInit()\r\n");fwrite(hFile, var);
			    format(var, 200, "Reja1 = CreateObject(%d,%f,%f,%f,%f,%f,%f);\r\n",NString,POSG[0],POSG[1],POSG[2],ROTG[0],ROTG[1],ROTG[2]);fwrite(hFile, var);
                format(var, 200, " \r\n");fwrite(hFile, var);
				format(var, 200, "Comando para Abrir:\r\n");fwrite(hFile, var);
				format(var, 200, "if(strcmp(\"/abrirpuerta\", cmdtext, true, 10) == 0)\r\n");fwrite(hFile, var);
				format(var, 200, "{\r\n");fwrite(hFile, var);
			    format(var, 200, "	MoveObject(Reja1,%f,%f,%f,2.5);\r\n",POSG[3],POSG[4],POSG[5]);fwrite(hFile, var);
			    format(var, 200, "	return 1;\r\n");fwrite(hFile, var);
			    format(var, 200, "}\r\n");fwrite(hFile, var);
			    format(var, 200, " \r\n");fwrite(hFile, var);
			    format(var, 200, "Comando para Cerrar:\r\n");fwrite(hFile, var);
				format(var, 200, "if(strcmp(\"/cerrarpuerta\", cmdtext, true, 10) == 0)\r\n");fwrite(hFile, var);
				format(var, 200, "{\r\n");fwrite(hFile, var);
			    format(var, 200, "	MoveObject(Reja1,%f,%f,%f,2.5);\r\n",POSG[0],POSG[1],POSG[2]);fwrite(hFile, var);
			    format(var, 200, "	return 1;\r\n");fwrite(hFile, var);
			    format(var, 200, "}\r\n");fwrite(hFile, var);
			    
			    fclose(hFile);
			    PASOS[playerid] = 0;
				EstaViendo[playerid] = 0;
				KillTimer(TT[playerid]);
				KillTimer(TRotar);
				MueveORota[playerid] = 0;
				Variable = 99;
				TogglePlayerControllable(playerid,1);
			    return 1;
			}
		}
		else
		{
		    PASOS[playerid] = 0;
			EstaViendo[playerid] = 0;
			KillTimer(TT[playerid]);
			KillTimer(TRotar);
			MueveORota[playerid] = 0;
			Variable = 99;
			TogglePlayerControllable(playerid,0);
			return 1;
		}
	}
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys == KEY_SECONDARY_ATTACK)
    {
        if(PASOS[playerid] == 0) return 1;

        EstaViendo[playerid] = 0;
		KillTimer(TT[playerid]);
		KillTimer(TRotar);
		MueveORota[playerid] = 0;
		Variable = 99;
		TogglePlayerControllable(playerid,0);
		ShowPlayerDialog(playerid,651,DIALOG_STYLE_LIST,"Opciones Rejas","Cambiar Objecto\nMover Objeto\nCambiar Rotacion\nVisualizar\nCrear Reja Abierta\nFinalizar","Selecc.","Salir");
	}
	return 1;
}

forward Teclas(playerid);
public Teclas(playerid)
{
    new keys, updown, leftright, Float:OBJ[3], Float:ROBJ[3];
    GetPlayerKeys(playerid, keys, updown, leftright);
    if(PASOS[playerid] == 1)
    {
        if(EstaViendo[playerid] == 1)
        {
            GetObjectRot(RejaCreando[0],POSOR[0],POSOR[1],POSOR[2]);
            if(leftright == KEY_RIGHT) 
            {
                Variable ++;
                if(Variable >= 7) Variable = 1;
			}
            if(leftright == KEY_LEFT)
            {
                Variable --;
                if(Variable <= 0) Variable = 6;
			}
            DestroyObject(RejaCreando[0]);
	  		if(Variable == 1)
            {
                RejaV = 1;
            	RejaCreando[0] = CreateObject(969,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 2)
            {
                RejaV = 2;
            	RejaCreando[0] = CreateObject(971,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 3)
            {
                RejaV = 3;
            	RejaCreando[0] = CreateObject(975,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 4)
            {
                RejaV = 4;
            	RejaCreando[0] = CreateObject(976,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 5)
            {
                RejaV = 5;
            	RejaCreando[0] = CreateObject(989,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 6)
            {
                RejaV = 6;
            	RejaCreando[0] = CreateObject(980,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
		}
        if(MueveORota[playerid] == 1)
        {
		    GetObjectPos(RejaCreando[0],OBJ[0],OBJ[1],OBJ[2]);
		    if(leftright == KEY_RIGHT)
		    {
	        	SetObjectPos(RejaCreando[0],OBJ[0]+0.3,OBJ[1],OBJ[2]);
			}
			else if(leftright == KEY_LEFT)
			{
		    	SetObjectPos(RejaCreando[0],OBJ[0]-0.3,OBJ[1],OBJ[2]);
			}

			if(keys == KEY_FIRE)
			{
		    	SetObjectPos(RejaCreando[0],OBJ[0],OBJ[1],OBJ[2]+0.3);
			}
			else if(keys == KEY_HANDBRAKE)
			{
		    	SetObjectPos(RejaCreando[0],OBJ[0],OBJ[1],OBJ[2]-0.3);
			}

			if(updown == KEY_UP)
			{
		    	SetObjectPos(RejaCreando[0],OBJ[0],OBJ[1]+0.3,OBJ[2]);
			}
			else if(updown == KEY_DOWN)
			{
		    	SetObjectPos(RejaCreando[0],OBJ[0],OBJ[1]-0.3,OBJ[2]);
			}
		}
		else if(MueveORota[playerid] == 2)
		{
		    GetObjectRot(RejaCreando[0],ROBJ[0],ROBJ[1],ROBJ[2]);
		    if(leftright == KEY_RIGHT)
		    {
	        	SetObjectRot(RejaCreando[0],ROBJ[0]+0.5,ROBJ[1],ROBJ[2]);
			}
			else if(leftright == KEY_LEFT)
			{
		    	SetObjectRot(RejaCreando[0],ROBJ[0]-0.5,ROBJ[1],ROBJ[2]);
			}

			if(keys == KEY_FIRE)
			{
				SetObjectRot(RejaCreando[0],ROBJ[0],ROBJ[1],ROBJ[2]+1);
			}
			else if(keys == KEY_HANDBRAKE)
			{
		    	SetObjectRot(RejaCreando[0],ROBJ[0],ROBJ[1],ROBJ[2]-1);
			}

			if(updown == KEY_UP)
			{
		    	SetObjectRot(RejaCreando[0],ROBJ[0],ROBJ[1]+0.5,ROBJ[2]);
			}
			else if(updown == KEY_DOWN)
			{
		    	SetObjectRot(RejaCreando[0],ROBJ[0],ROBJ[1]-0.5,ROBJ[2]);
			}
		}
	}
	if(PASOS[playerid] == 2)
    {
        if(EstaViendo[playerid] == 1)
        {
            GetObjectRot(RejaCreando[1],POSOR[0],POSOR[1],POSOR[2]);
            if(leftright == KEY_RIGHT)
            {
                Variable ++;
                if(Variable >= 7) Variable = 1;
			}
            if(leftright == KEY_LEFT)
            {
                Variable --;
                if(Variable <= 0) Variable = 6;
			}
            DestroyObject(RejaCreando[1]);
	  		if(Variable == 1)
            {
                RejaV = 1;
            	RejaCreando[1] = CreateObject(969,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 2)
            {
                RejaV = 2;
            	RejaCreando[1] = CreateObject(971,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 3)
            {
                RejaV = 3;
            	RejaCreando[1] = CreateObject(975,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 4)
            {
                RejaV = 4;
            	RejaCreando[1] = CreateObject(976,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 5)
            {
                RejaV = 5;
            	RejaCreando[1] = CreateObject(989,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
			else if(Variable == 6)
            {
                RejaV = 6;
            	RejaCreando[1] = CreateObject(980,VP[0],VP[1],VP[2],POSOR[0],POSOR[1],POSOR[2]); // RX
			}
		}
        if(MueveORota[playerid] == 1)
        {
		    GetObjectPos(RejaCreando[1],OBJ[0],OBJ[1],OBJ[2]);
		    if(leftright == KEY_RIGHT)
		    {
	        	SetObjectPos(RejaCreando[1],OBJ[0]+0.5,OBJ[1],OBJ[2]);
			}
			else if(leftright == KEY_LEFT)
			{
		    	SetObjectPos(RejaCreando[1],OBJ[0]-0.5,OBJ[1],OBJ[2]);
			}

			if(keys == KEY_FIRE)
			{
		    	SetObjectPos(RejaCreando[1],OBJ[0],OBJ[1],OBJ[2]+0.5);
			}
			else if(keys == KEY_HANDBRAKE)
			{
		    	SetObjectPos(RejaCreando[1],OBJ[0],OBJ[1],OBJ[2]-0.5);
			}

			if(updown == KEY_UP)
			{
		    	SetObjectPos(RejaCreando[1],OBJ[0],OBJ[1]+0.5,OBJ[2]);
			}
			else if(updown == KEY_DOWN)
			{
		    	SetObjectPos(RejaCreando[1],OBJ[0],OBJ[1]-0.5,OBJ[2]);
			}
		}
		else if(MueveORota[playerid] == 2)
		{
		    GetObjectRot(RejaCreando[1],ROBJ[0],ROBJ[1],ROBJ[2]);
		    if(leftright == KEY_RIGHT)
		    {
	        	SetObjectRot(RejaCreando[1],ROBJ[0]+0.5,ROBJ[1],ROBJ[2]);
			}
			else if(leftright == KEY_LEFT)
			{
		    	SetObjectRot(RejaCreando[1],ROBJ[0]-0.5,ROBJ[1],ROBJ[2]);
			}

			if(keys == KEY_FIRE)
			{
				SetObjectRot(RejaCreando[1],ROBJ[0],ROBJ[1],ROBJ[2]+0.5);
			}
			else if(keys == KEY_HANDBRAKE)
			{
		    	SetObjectRot(RejaCreando[1],ROBJ[0],ROBJ[1],ROBJ[2]-0.5);
			}

			if(updown == KEY_UP)
			{
		    	SetObjectRot(RejaCreando[1],ROBJ[0],ROBJ[1]+0.5,ROBJ[2]);
			}
			else if(updown == KEY_DOWN)
			{
		    	SetObjectRot(RejaCreando[1],ROBJ[0],ROBJ[1]-0.5,ROBJ[2]);
			}
		}
	}
	return 1;
}

GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
{
	new Float:a;

	GetPlayerPos(playerid, x, y, a);
	GetPlayerFacingAngle(playerid, a);

	if (GetPlayerVehicleID(playerid)) {
	    GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
	}

	x += (distance * floatsin(-a, degrees));
	y += (distance * floatcos(-a, degrees));
}

//						 	  Creador de Rejas por GROVE4L