como creo un sistema de niveles por score/puntaje?
#1

quisiera saver como crear un sistema basico de niveles por score/puntaje, por ejem: -Novato 0 score, -Amateur 150 score, -Semi-Profesional 300 score, -Profesional 500 score, -Semi-Master 750 score y -Master con 1000 score si alguien save como crear un sistema asi, que me explique como, he buscado sistemas de niveles/rangos basicos pero todos son por Time y con premios.

Agradesco su ayuda
Reply
#2

crea variables y segun quieras que suba el nivel (kills, tiempo, experiencia) subis el valor de esa variable. si queres q cuando se cierre el sv se guarden los datos, entonces guardalos en un archivo.
Reply
#3

pawn Код:
// ARRIBA DE TODO
enum
    e_NivelesInfo
    {
        e_NI_Name[32],
        e_NI_Score
    };

new
    g_aNivelesInfo[][e_NivelesInfo] =
    {
        // NombreDelRango, Score necesario
        "Novato", 0,
        "Amateur", 150,
        "Semi-Profesional", 300,
        "Profesional", 500,
        "Semi-Master", 750,
        "Master", 1000
    };



// FUNCION
stock
    CheckForLevel(playerid)
    {
        new
            iScore = GetPlayerScore(playerid),
            iPos;

        for (iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
                return 1;

        return 0;
    }


stock
    GetPlayerLevelName(playerid, name[], size = 32)
    {
        new
            iPos,
            iLevel;

        for (new iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
            {
                iLevel = iPos;
                break;
            }

        strins(name, g_iNivelesInfo[iLevel][e_NI_Name], 0, size);

        return 1;
    }

En la variable g_iNivelesInfo agregбs los niveles con los score como estб en el comentario.
La funciуn CheckForLevel retorna 1 si el jugador tiene score suficiente para algun rango.
La funciуn GetPlayerLevelName funciona como GetPlayerName y retorna el nivel del jugador.

Es un sistema simple que acabo de hacerte XD
Reply
#4

Quote:
Originally Posted by MrDeath537
Посмотреть сообщение
pawn Код:
// ARRIBA DE TODO
enum
    e_NivelesInfo
    {
        e_NI_Name[32],
        e_NI_Score
    };

new
    g_aNivelesInfo[][e_NivelesInfo] =
    {
        // NombreDelRango, Score necesario
        "Novato", 0,
        "Amateur", 150,
        "Semi-Profesional", 300,
        "Profesional", 500,
        "Semi-Master", 750,
        "Master", 1000
    };



// FUNCION
stock
    CheckForLevel(playerid)
    {
        new
            iScore = GetPlayerScore(playerid),
            iPos;

        for (iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
                return 1;

        return 0;
    }


stock
    GetPlayerLevelName(playerid, name[], size = 32)
    {
        new
            iPos,
            iLevel;

        for (new iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
            {
                iLevel = iPos;
                break;
            }

        strins(name, g_iNivelesInfo[iLevel][e_NI_Name], 0, size);

        return 1;
    }

En la variable g_iNivelesInfo agregбs los niveles con los score como estб en el comentario.
La funciуn CheckForLevel retorna 1 si el jugador tiene score suficiente para algun rango.
La funciуn GetPlayerLevelName funciona como GetPlayerName y retorna el nivel del jugador.

Es un sistema simple que acabo de hacerte XD
explicale el codigo chavon no va a entender un carajo... sabes q no todos lo entienden raton...
Reply
#5

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
explicale el codigo chavon no va a entender un carajo... sabes q no todos lo entienden raton...
ehh, si entendi todo solo que no savia como hacer el sistema ya que hace 1 aсo que estava ausente de pwn

Muchas gracias por sus respuestas!, pero como hago para saver cual es mi rango usando la funcion "g_aNivelesInfo" en un comando como /rank??
Reply
#6

g_aNivelesInfo no es una funciуn, es una matriz conteniendo dos cosas las cuales te son muy ъtiles: nombre del rango y el puntaje que necesitas para tenerlo. їCуmo lo usas? vas desde el final hasta el inicio, comparando el nъmero del mayor rango con el nъmero de puntos que tiene el jugador. Cuando el nъmero de puntos sea mayor o igual al rango, habras encontrado el rango del jugador.

Ejemplo:
pawn Код:
EncontrarRangoDeJugador(playerid)
{
    for(new i = sizeof(g_aNivelesInfo); i > -1; i --)
        if(VariableDePuntajeDeJugador[playerid] >= g_aNivelesInfo[i][e_NI_Score])
            return g_aNivelesInfo[i][e_NI_Name];
            // return i; Esto solamente si quieres retornar el rango, mбs no el nombre del rango.
}
Reply
#7

mmm pero como yo se mi rango a traves de un comando? por ejemplo poniendo /mirango y que me salga Tu rango actual es: "X"
Reply
#8

pawn Код:
if (!strcmp(cmdtext, "/mirango", true))
{
    new string[128];
    GetPlayerLevelName(playerid, string);
    format(string, sizeof (string), "Tu rango actual es: \"%s\"", string);
    SendClientMessage(playerid, 0xFFFFFFFF, string);

    return 1;
}
Reply
#9

Quote:
Originally Posted by MrDeath537
Посмотреть сообщение
pawn Код:
if (!strcmp(cmdtext, "/mirango", true))
{
    new string[128];
    GetPlayerLevelName(playerid, string);
    format(string, sizeof (string), "Tu rango actual es: \"%s\"", string);
    SendClientMessage(playerid, 0xFFFFFFFF, string);

    return 1;
}
Me da estos errores:

C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : warning 219: local variable "iPos" shadows a variable at a preceding level
C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : error 017: undefined symbol "g_iNivelesInfo"
C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : warning 215: expression has no effect
C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : error 001: expected token: ")", but found ";"
C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : error 036: empty statement
C:\Users\Rombo\Documents\New Server\Mini-TDM\gamemodes\Mini-TDM.pwn(1263) : fatal error 107: too many error messages on one line

La linea que da error:
pawn Код:
for (new iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
Reply
#10

Cуdigo arreglado:

pawn Код:
// ARRIBA DE TODO
enum
    e_NivelesInfo
    {
        e_NI_Name[32],
        e_NI_Score
    };

new
    g_aNivelesInfo[][e_NivelesInfo] =
    {
        // NombreDelRango, Score necesario
        "Novato", 0,
        "Amateur", 150,
        "Semi-Profesional", 300,
        "Profesional", 500,
        "Semi-Master", 750,
        "Master", 1000
    };



// FUNCION
stock
    CheckForLevel(playerid)
    {
        new
            iScore = GetPlayerScore(playerid),
            iPos;

        for (iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
                return 1;

        return 0;
    }


stock
    GetPlayerLevelName(playerid, name[], size = 32)
    {
        new
            iPos,
            iLevel;

        for (iPos = sizeof (g_iNivelesInfo); iPos > 0; iPos --)
            if (iScore >= g_iNivelesInfo[iPos][e_NI_Score])
            {
                iLevel = iPos;
                break;
            }

        strins(name, g_iNivelesInfo[iLevel][e_NI_Name], 0, size);

        return 1;
    }
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)