Raised This Month: $12 Target: $400
 3% 

[Traducción Tutorial] XP Mod


  
 
 
Thread Tools Display Modes
Author Message
nattal
Member
Join Date: Jan 2013
Location: ADN Programmer
Old 08-06-2013 , 12:18   [Traducción Tutorial] XP Mod
#1

Bueno, quiero aclarar que lo único que hice fue traducir el tutorial creado por flyeni6, no agregue nada nuevo. Si hay algún error en la traducción por favor avisarme.

Tutorial Original: http://forums.alliedmods.net/showthread.php?t=66497
Traductor: nattal

Primero que nada, todos los créditos van para fxfighter, el revisó esto. Todo lo que hago es publicar esto asi la gente no va a otro tutorial de xp mod (que no funcione). Y he añadido un poco de extras para que sea mejor. De todas formas, vamos al tutorial...

Voy a mostrarles como pueden hacer para crear un XP mod.
Antes de empezar, debes tener los conocimientos básicos en scripting.

Incluimos todos los modulos importantes:

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <nvault> 
Definimos las clases máximas

Aca hay 5, pero si queres agregar 2 animales mas, como un pájaro o un pez, entonces tienes que poner 7. Pero se trata de 5

PHP Code:
#define MAXCLASSES 5 
Creamos la variable que va a tener su clase, xp, y el nivel

PHP Code:
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
 
//Estos son para asesinatos especiales
new XP_Kill,XP_Knife,XP_Hs,SaveXP
 
//Esto es por Nvault. De modo que asi podemos guardar la XP
 
new g_vault 
Esta es la variable "maxclasses" que estábamos hablando. Vas a ver esto en el juego.

PHP Code:
new const CLASSES[MAXCLASSES][] = {
    
"None",
    
"Dog",
    
"Cat",
    
"Horse",
    
"Cow"

Nota que ahí hay 5 clases. Por eso es que definimos maxclasses a 5.

Ahora creamos los niveles, y cuanta XP necesita para ganar nivel (o subir nivel).
Hay 7 niveles

PHP Code:
new const LEVELS[7] = {
0,
100,//esto significa que necesitas 100 xp
200,//esto significa que necesitas 200 xp
400,//esto significa que necesitas 400 xp
800,//Así sucesivamente
1600,//Así sucesivamente
3200 //Así sucesivamente

Ahora creamos el plugin_init()

PHP Code:
public plugin_init()
{
    
register_plugin("XpMod""1.0""Fxfighter")
 
    
//necesitamos esto para comprobar el nivel después de matar a alguien
    
register_event("DeathMsg""eDeath""a")
    
//Se esta salvando?
    
SaveXP register_cvar("SaveXP","1")
    
//cuántos XP vas a conseguir por muerte?
    
XP_Kill=register_cvar("XP_per_kill""20")
    
//Si haces un hs obtenes un bonus en XP
    
XP_Hs=register_cvar("XP_hs_bonus","20")
    
//Si matas a alguien con cuchillo obtenes un bonus en XP
    
XP_Knife=register_cvar("XP_knife_bonus","20")
    
//acabamos de abrir una nueva conexión NVAULT conexión
    // Vamos a llamarlo "animod"
    
g_vault nvault_open("animod")
    
// Registramos un comando por say para cambiar de clase
    
register_clcmd("say /class""ChangeClass")
    
register_clcmd("say_team /class""ChangeClass")
    
//Muestra cuanta XP tenes
    
register_clcmd("say /xp""ShowHud")
    
register_clcmd("say_team /xp""ShowHud")

Vamos a crear la función de Muerte. Recuerda que nosotros llamamos "eDeath" en plugin_init ()? Asimismo, mantendrá un registro de su xp y si ganaste (o subiste) de nivel.


PHP Code:
public eDeath( ) //Nombre de la función 

    
//Si el player no tiene clase, entonces no te molestes en hacer cualquiera de las siguientes cosas.
    
if(PlayerClass[attacker] == 0)
         return 
PLUGIN_CONTINUE

    
// Creamos una variable para almacenar el ID del Atacante
    
new attacker read_data)
    
// Creamos la variable de la víctima, de modo que esta función puede checkear
    // Si un jugador fue asesinado
    
new iVictim read_data)
    
// Si un player fue asesinado por un HeadShot, este será utilizado por el cvar Xp_Hs
    
new headshot read_data)
 
    
//Que arma se uso
    
new clipammoweapon get_user_weapon(attacker,clip,ammo);
    
PlayerXP[attacker] += get_pcvar_num(XP_Kill
    
// Usado por el cvar xp_hs
    // Chekea si la víctima fue asesinada por un Headshot 
    
if(headshot
    
// Le da a el/ella un bonus de XP 
    
PlayerXP[attacker] += get_pcvar_num(XP_Hs
    
// Chekea si la víctima fue asesinada por el cuchillo 
    
if(weapon == CSW_KNIFE
        
//Le da a el/ella un bonus de XP  
    
PlayerXP[attacker] += get_pcvar_num(XP_Knife
    
// Esto chekea si el player tiene el suficiente XP para avanzar a un nivel (superior en este caso)
 
     
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) 
    { 
// Creamos el mensaje de Felicitaciones por pasar de nivel. 
        
client_print(attackerprint_chat"[Animal Mod] Congratulations! You are a level %i %s!"PlayerLevel[attacker],CLASSES[PlayerClass[attacker]]) 
        
// Agregamos su level 
        
PlayerLevel[attacker] += 
    

    
// Muestra su nivel en un mensaje por hud. 
    
ShowHud(attacker)
 

Esta es la función showhud. Muestra tu clase, tu nivel y XP

PHP Code:

    
set_hudmessage(255000.750.0106.015.0
    
show_hudmessage(id"Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]]) 

Aclaración: ^n significa nueva línea.

Aquí está el selector de menús. Te da las opciones para seleccionar su animal. Utiliza el nuevo sistema de menús. No siento que deba entrar en detalles con el nuevo sistema de menús, si te interesa, dejo el link del tutorial de menús:http://forums.alliedmods.net/showthread.php?t=46364

PHP Code:
public ChangeClass(id
{
    new 
menu menu_create("Class Menu" "Class_Handle");
    
menu_additem(menu ,"Dog""1" 0); 
    
menu_additem(menu ,"Cat""2" 0); 
    
menu_additem(menu ,"Horse""3" 0); 
    
menu_additem(menu ,"Cow""4" 0);
    
menu_setprop(menu MPROP_EXIT MEXIT_ALL);
    
menu_display(id menu 0); 
    return 
PLUGIN_CONTINUE

 
public 
Class_Handle(id menu item

    if(
item == MENU_EXIT
    { 
        
menu_destroy(menu); 
    } 
    new 
szCommand[6] , szName[64]; new access callback
    
menu_item_getinfo(menu item access szCommand szName 63 callback); 
    new 
str_to_num(szCommand
    if(
PlayerClass[id] != i
    { 
        
PlayerClass[id] = i client_print(id,print_chat,"You are now a %s",CLASSES[i]) 
    }
    else 
    { 
        
client_print(id,print_chat,"You are alredy a %s",CLASSES[i]) 
    } 
    
menu_destroy(menu); 
    return 
PLUGIN_CONTINUE 

Esta es la función de conexión del cliente. Todas esas cosas que suceden cuando un player se conecta al server

PHP Code:
public client_connect(id
{
    
// Solo hace esto si esta activado el guardado de XP 
    
if(get_pcvar_num(SaveXP) == 1
    { 
        
// Cargamos la información del player.
        
LoadData(id
    } 

Esta es la función de desconexión del cliente. Esto solo sucede cuando el player se desconecta del servidor.

PHP Code:
public client_disconnect(id

// Solo hace esto si esta activado el guardado de XP
     
if(get_pcvar_num(SaveXP) == 1
     { 
          
// guardamos los datos
          
SaveData(id
     } 

Ahora creamos la función para guardar los datos.

PHP Code:
public SaveData(id

    
// Obtiene el steam ID de los players. Necesitamos esto porque vamos a guardar por Steam ID 
    
new AuthID[35get_user_authid(id,AuthID,34
    new 
vaultkey[64],vaultdata[256
    
// Formato de lo que va a estar en el archivo Vault del mod animal 
    
format(vaultkey,63,"%s-Mod",AuthID
    
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) 
    
// Guardamos la información
    
nvault_set(g_vault,vaultkey,vaultdata
    return 
PLUGIN_CONTINUE 

Ahora creamos la función para cargar los datos.

PHP Code:
public LoadData(id

    new 
AuthID[35get_user_authid(id,AuthID,34
    new 
vaultkey[64],vaultdata[256
    
// Busca
    
format(vaultkey,63,"%s-Mod",AuthID
    
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) 
    
// Carga la información 
    
nvault_get(g_vault,vaultkey,vaultdata,255
    
replace_all(vaultdata255"#"" "
    new 
playerxp[32], playerlevel[32
    
parse(vaultdataplayerxp31playerlevel31
    
PlayerXP[id] = str_to_num(playerxp
    
PlayerLevel[id] = str_to_num(playerlevel
    return 
PLUGIN_CONTINUE 

Ok, ahora todo pero sin los comentarios

Code:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define MAXCLASSES 5
new const CLASSES[MAXCLASSES][] = {
    "None",
    "Dog",
    "Cat",
    "Horse",
    "Cow"
}
new const LEVELS[6] = {
    100, 
    200, 
    400, 
    800,
    1600,
    3200
}
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP,g_vault
public plugin_init()
{
    register_plugin("XpMod", "1.0", "Fxfighter")
 
    register_event("DeathMsg", "eDeath", "a") 
 
    SaveXP = register_cvar("SaveXP","1")
    XP_Kill=register_cvar("XP_per_kill", "20")
    XP_Hs=register_cvar("XP_hs_bonus","20")
    XP_Knife=register_cvar("XP_knife_bonus","20")
    g_vault = nvault_open("animod")
 
    register_clcmd("say /class", "ChangeClass")
    register_clcmd("say_team /class", "ChangeClass")
    register_clcmd("say /xp", "ShowHud")
    register_clcmd("say_team /xp", "ShowHud")
}
public eDeath(  ) 
{
    new attacker = read_data( 1 )
    new iVictim = read_data( 2 )
    new headshot = read_data( 3 )
    new clip, ammo, weapon = get_user_weapon(attacker,clip,ammo);
 
    PlayerXP[attacker] += get_pcvar_num(XP_Kill)
 
    if(headshot)
    PlayerXP[attacker] += get_pcvar_num(XP_Hs)
 
    if(weapon == CSW_KNIFE)
    PlayerXP[attacker] += get_pcvar_num(XP_Knife)
 
 
    while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
    {
      client_print(attacker, print_chat, "[Animal Mod] Congratulations! You are a level %i %s!",
      PlayerLevel[attacker] += 1
    }
    ShowHud(attacker)
    SaveData(attacker)
}
public ShowHud(id)
{
    set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
    show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}
public ChangeClass(id)
{
    new menu = menu_create("Class Menu" , "Class_Handle");
    menu_additem(menu ,"Dog", "1" , 0);
    menu_additem(menu ,"Cat", "2" , 0);
    menu_additem(menu ,"Horse", "3" , 0);
    menu_additem(menu ,"Cow", "4" , 0);
 
    menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
 
    menu_display(id , menu , 0);
 
    return PLUGIN_CONTINUE;
}
public Class_Handle(id , menu , item) 
{
    if(item == MENU_EXIT) 
    {
 
        menu_destroy(menu);
 
    }
 
    new szCommand[6] , szName[64];
    new access , callback;
 
    menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
 
    new i = str_to_num(szCommand)
    if(PlayerClass[id] != i)
    {
        PlayerClass[id] = i
        client_print(id,print_chat,"You are now a %s",CLASSES[i])
    }
    else
    {
        client_print(id,print_chat,"You are alredy a %s",CLASSES[i])
    }
 
    menu_destroy(menu);
    return PLUGIN_CONTINUE
}
public client_connect(id)
{
    if(get_pcvar_num(SaveXP) == 1)
    {
 
        LoadData(id)
    }
}
public client_disconnect(id)
{
    if(get_pcvar_num(SaveXP) == 1)
    {
 
        SaveData(id)
    }
    PlayerXP[id] = 0
    PlayerLevel[id] = 0
    PlayerClass[id] = 0
}
public SaveData(id)
{
    new AuthID[35]
    get_user_authid(id,AuthID,34)
 
    new vaultkey[64],vaultdata[256]
    format(vaultkey,63,"%s-Mod",AuthID)
    format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
    nvault_set(g_vault,vaultkey,vaultdata)
    return PLUGIN_CONTINUE
}
public LoadData(id)
{
    new AuthID[35]
    get_user_authid(id,AuthID,34)
 
    new vaultkey[64],vaultdata[256]
    format(vaultkey,63,"%s-Mod",AuthID)
    format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
    nvault_get(g_vault,vaultkey,vaultdata,255)
 
    replace_all(vaultdata, 255, "#", " ")
 
    new playerxp[32], playerlevel[32]
 
    parse(vaultdata, playerxp, 31, playerlevel, 31)
 
    PlayerXP[id] = str_to_num(playerxp)
    PlayerLevel[id] = str_to_num(playerlevel)
 
    return PLUGIN_CONTINUE
}
Espero (por más que no es nada nuevo) que a alguien le sirva en español.

Last edited by nattal; 08-07-2013 at 19:50.
nattal is offline
Send a message via Skype™ to nattal
chetah
Senior Member
Join Date: Jan 2013
Location: BangBros
Old 08-06-2013 , 17:26   Re: [Tutorial] Nuevo XP Mod
#2

No es nada nuevo, una cosa, entiendes todo de lo que dices traducir?
__________________
Minecraft Mod: | %15
"Tomorrowland <3"
chetah is offline
nattal
Member
Join Date: Jan 2013
Location: ADN Programmer
Old 08-06-2013 , 17:58   Re: [Tutorial] Nuevo XP Mod
#3

Siempre comentando cosas innecesarias vos, no creo que sea el primero en decirte que sos muy molesto. Aclaro de nuevo, porque se ve que por tu falta de literatura en el secundario al que debes ir (que por lo visto no les enseñan a leer) que dije al principio del post: "no agregue nada nuevo" y al final del post aclare nuevamente: "por más que no es nada nuevo" . Yo te diría que empiezes a leer completo, traducí literalmente (si no sabes que es literalmente busca en un mata burros) el tutorial. Esto es para los que no se llevan bien con el inglés lo tengan en español. La verdad no me parece mal lo que hice, y ya veo que llegaste a Senior Member diciendo cosas sin sentido y sin haber leído o como mucha instancia haciendo ejemplos de plugins que ya todos saben como se hace.

PD: Cabe aclarar que lo podría haber hecho también explicando cosas, pero me pareció bien como estaba, si no se entiende algo avisarme!

Al que le sirvió en español me alegro, total, me pareció un buen tutorial para tenerlo en español.

Last edited by nattal; 08-06-2013 at 18:10.
nattal is offline
Send a message via Skype™ to nattal
chetah
Senior Member
Join Date: Jan 2013
Location: BangBros
Old 08-06-2013 , 18:08   Re: [Tutorial] Nuevo XP Mod
#4

Quote:
Originally Posted by nattal
Siempre comentando cosas innecesarias vos, no creo que sea el primero en decirte que sos muy molesto. Aclaro de nuevo, porque se ve que por tu falta de literatura en el secundario berreta al que debes ir (que por lo visto no les enseñan a leer) que dije al principio del post: "no agregue nada nuevo" y al final del post aclare nuevamente: "por más que no es nada nuevo" . Yo te diría que empiezes a leer completo, traducí literalmente (si no sabes que es literalmente busca en un mata burros) el tutorial. Esto es para los que no se llevan bien con el inglés lo tengan en español. La verdad no me parece mal lo que hice, y ya veo que llegaste a Senior Member diciendo cosas sin sentido y sin haber leído o como mucha instancia haciendo ejemplos de plugins que ya todos saben como se hace.

PD: Te puedo asegurar, que por más que pida ayuda en cosas bobas porque capas no me doy cuenta, se bastante. Y te aseguro lo que quieras que se mejor y más que vos sobre los conceptos de programación y sobre sus funciones en C. No desvirtues más el tema, dale? Gracias.

Al que le sirvió en español me alegro, total, me pareció un buen tutorial para tenerlo en español.
Lol ok temalicross
Aqui el que no sabe leer eres tu, hice una pregunta
Quote:
Originally Posted by chetah
entiendes todo de lo que dices traducir?
No me referia al Ingles ni nada eso, en pawn, como dijo lucas un dia, cosas como estas las puede hacer cualquiera, estaria lleno el foro.
Me alegro que progreses pero no tires el off porque nunca dije nada en contra, ok?
__________________
Minecraft Mod: | %15
"Tomorrowland <3"
chetah is offline
nattal
Member
Join Date: Jan 2013
Location: ADN Programmer
Old 08-06-2013 , 18:21   Re: [Tutorial] Nuevo XP Mod
#5

Ok, porque ya había pasado esto.¿Como no voy a entender lo que traducí? Por algo digo que traducí. Si, entiendo todo lo que digo traducir, se bastante inglés. Pero te repito, traducí literalmente al pie y letra. Yo lo hubiese escrito de otra forma, pero bueno. Si, lo puede hacer cualquiera, pero no con cualquier Tutorial, a mi me pareció que este en español para aquellos que no entiendan mucho inglés, ya que es un tutorial general y no centrado especificamente en algún mod.

Last edited by nattal; 08-06-2013 at 18:24.
nattal is offline
Send a message via Skype™ to nattal
chetah
Senior Member
Join Date: Jan 2013
Location: BangBros
Old 08-06-2013 , 20:20   Re: [Tutorial] Nuevo XP Mod
#6

Aun no entiendes -.-
Me explico, si tu entiendes cada una de las funciones de ese tutorial que tradujiste, como hacer los guardados....etc
No me refería la traducción del Ingles al Español.
__________________
Minecraft Mod: | %15
"Tomorrowland <3"
chetah is offline
nattal
Member
Join Date: Jan 2013
Location: ADN Programmer
Old 08-06-2013 , 21:28   Re: [Tutorial] Nuevo XP Mod
#7

A bueno, te tendrías que explicar bien desde un principio. Claro que entiendo, ahora.. yo no entiendo porque preguntas eso, me parece una pregunta un tanto "demás"

Last edited by nattal; 08-06-2013 at 21:28.
nattal is offline
Send a message via Skype™ to nattal
Ayudante
Member
Join Date: Jul 2013
Location: Mi Casa!
Old 08-07-2013 , 01:33   Re: [Tutorial] Nuevo XP Mod
#8

Quote:
Originally Posted by chetah View Post
temalicross
LoL, xD
Ayudante is offline
Roccoxx
AlliedModders Donor
Join Date: Jan 2012
Location: Argentina
Old 08-07-2013 , 08:15   Re: [Tutorial] Nuevo XP Mod
#9

trash
__________________
Tutorials here (Spanish)

Like as another Pijudo said: "Tired and retired"
Roccoxx is offline
Send a message via MSN to Roccoxx
nattal
Member
Join Date: Jan 2013
Location: ADN Programmer
Old 08-07-2013 , 10:38   Re: [Tutorial] Nuevo XP Mod
#10

Ok, si no les gusto no tengo problema.. Borrenlo, yo particularmente no tengo problema en leer tutoriales en inglés. Problema de ustedes. Gracias.

Last edited by nattal; 08-07-2013 at 10:38.
nattal is offline
Send a message via Skype™ to nattal
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:29.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode