[Duda] Optimizar esta funciуn
#1

He creado una funciуn para mi servidor, pero me he dado cuenta que es demasiado larga y pensaba que habria algъn modo de crear un loop o algo con los niveles, pero estoy en blanco.

El cуdigo es el siguiente, la funciуn:

Код:
function SubirNivel(playerid)
{
	if(Info[playerid][pLevel] == 1)
	{
		if(Info[playerid][pExp] > 8){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 2.");}
	}
	else if(Info[playerid][pLevel] == 2)
	{
		if(Info[playerid][pExp] > 12){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 3.");}
	}
	else if(Info[playerid][pLevel] == 3)
	{
		if(Info[playerid][pExp] > 16){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 4.");}
	}
	else if(Info[playerid][pLevel] == 4)
	{
		if(Info[playerid][pExp] > 20){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 5.");}
	}
	else if(Info[playerid][pLevel] == 5)
	{
		if(Info[playerid][pExp] > 24){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 6.");}
	}
	else if(Info[playerid][pLevel] == 6)
	{
		if(Info[playerid][pExp] > 28){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 7.");}
	}
	else if(Info[playerid][pLevel] == 7)
	{
		if(Info[playerid][pExp] > 32){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 8.");}
	}
	else if(Info[playerid][pLevel] == 8)
	{
		if(Info[playerid][pExp] > 36){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 9.");}
	}
	else if(Info[playerid][pLevel] == 9)
	{
		if(Info[playerid][pExp] > 40){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 10.");}
	}
	else if(Info[playerid][pLevel] == 10)
	{
		if(Info[playerid][pExp] > 44){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 11.");}
	}
	else if(Info[playerid][pLevel] == 11)
	{
		if(Info[playerid][pExp] > 48){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 12.");}
	}
	else if(Info[playerid][pLevel] == 12)
	{
		if(Info[playerid][pExp] > 52){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 13.");}
	}
	else if(Info[playerid][pLevel] == 13)
	{
		if(Info[playerid][pExp] > 56){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 14.");}
	}
	else if(Info[playerid][pLevel] == 14)
	{
		if(Info[playerid][pExp] > 60){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 15.");}
	}
	else if(Info[playerid][pLevel] == 15)
	{
		if(Info[playerid][pExp] > 64){SendClientMessage(playerid, COLOR_GREY, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel 16.");}
	}
}
Cada nivel, +1 el nivel aumenta +4 la Experiencia, supongo que en esto estб la clave, pero no sй muy bien como hacer que esta funciуn estй mejor optimizada, gracias.
Reply
#2

Debe haber alguna forma con enums para hacer lo que dices pero se me ocurre de esta forma por ahora
Код:
SubirNivel(playerid)
{
	new nivel = Info[playerid][pLevel];
	static exp[] = {8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64};
	static string[64];
	static temp[4];
	string[0] = '\0';
	if(Info[playerid][pExp] > exp[nivel])
	{
		strcat(string, "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel ");
		valstr(temp, nivel+1);
		strcat(string, temp);
		strcat(string, ".");
		SendClientMessage(playerid, -1, string);
	}
}
Solo debes tener cuidado que el nivel que tenga el jugador no sea -1 o mayor a 15
Reply
#3

He probado el cуdigo y no funciona, no da ningъn aviso de que tenga que usar el CMD /subirnivel, cree un loop para cada nivel, desde el nivel 1 al 100, es decir revisarб a cada usuario si estб entre el nivel 1 y 100 y le dirб las horas de EXP, pero sigo pensando que hay maneras mejor de hacer esto bien. Gracias.
Reply
#4

pawn Код:
function SubirNivel(playerid)
{
    if(Info[playerid][pLevel] >= 1 && Info[playerid][pLevel] <= 15)
    {
        if(Info[playerid][pExp] > ((4 * Info[playerid][pLevel]) + (4)))
        {
            new string[144];
            format(string, sizeof(string), "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel %d.", (Info[playerid][pLevel] + 1));
            SendClientMessage(playerid, COLOR_GREY, string);
        }
    }
    return 1;
}
Reply
#5

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
pawn Код:
function SubirNivel(playerid)
{
    if(Info[playerid][pLevel] >= 1 && Info[playerid][pLevel] <= 15)
    {
        if(Info[playerid][pExp] > ((4 * Info[playerid][pLevel]) + (4)))
        {
            new string[144];
            format(string, sizeof(string), "[AVISO]:{FFFFFF} Usa /subirnivel para ser nivel %d.", (Info[playerid][pLevel] + 1));
            SendClientMessage(playerid, COLOR_GREY, string);
        }
    }
    return 1;
}
Gracias, era esto lo que mi mente no llegaba a conseguir: (4 * Info[playerid][pLevel]) + (4))

Ahora tiene lуgica la funciуn. Muchisimas gracias SickAttack.

4*1+4 =8
4*2+4 = 12
4*3+4 = 16
4*4+4 = 20
y etc, etc...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)