Allied Modders en español

Versión completa: GunGame con armas nuevas..
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Resulta que el único gungame que existe es solo para las armas standard, en este podrás agregar cualquier tipo de arma que funcione en counter strike 1.6. Utilicé todos mis conocimientos para hacer esto, y no es suficiente, el código no es del todo eficiente, y podría mejorarse mucho más, inclusive se le podrían agregar cosas, pero por ahora así sencillo está bien, agregar las armas requiere un medio de conocimiento y peor aún mientras más armas agregues hay más posibilidades de bug, pero eso es por la naturaleza de la edicion de las mismas armas que hablaré más adelante, por lo tanto tengo decir que este plugin funciona al %100 así como está.


Descripción:
Bueno es el GunGame, o Carrera de armas, o Arms Race, es el típico juego donde a medida que matas, subes de nivel y obtienes un arma distinta por cada nivel, hasta matar con todas las armas y por último tienes un cuchillo y si matas con él ganas.
Con este plugin puedes agregar cualquier tipo de arma que tengas en tu cs 1.6 y use natives.

Características:
*Puedes agregar el arma que quieras, espadas, molotov, bazooka,
lanzallamas, motocierras etc...
*Sonidos de victoria, derrota, al subir de nivel, obterner un arma etc...
*Cantidad de kills hasta subir de nivel modificables. (2 por defecto)
*Hud que avisan el arma que tienes y cuanto te falta para subir de nivel
cuando matas, y una tabla de posiciones donde muestra el primer
segundo y tercer puesto
*Un tercer y opcional hud que muestra la imagen de el arma siguiente a un costado
* Se puede jugar con podbots o czbots


Comandos:

ngg_on: iniciar gungame
ngg_off: terminar gungame
ngg_kills_por_nivel: cantidad de kill para subir de nivel (por defecto 2)

Requisitos:
Requiere el plugin CSDM el plugin Death Match de BAILOPAN

Instalación:
Ahora viene lo complicado, voy a tratar de explicarlo para lo que no saben nada de programación y ya de por si no saben nada, van a tener problemas. Los que ya saben se pueden saltear el tutorial

Primero y principal hay que tener las Natives registradas de las armas, son 2 natives si quieren que todo salga bien, la primera que llama la función donde se obtiene el arma, y la segunda para borrarla pero esta no es del todo necesaria si no se tienen bugs (así que la explicaré mas adelante). Si no saben lo que es la funcion "strip_armas_nuevas(id)" borren todo lo relacionado con "strip_armas_nuevas" que no es mucho

Para registrar una native de un arma, se entra al .sma (donde está el código del arma) y se escribe algo como esto:
Código PHP:
public plugin_natives()

    
register_native("native_dualuzi""Get_Base"1

Donde dice "native_dualuzi" puede ser cualquier nombre, es el nombre con el cual vamos a llamar a nuestra native en otros plugins.
Donde dice "Get_Base" ahí va la función que llama el arma

Luego en un archivo con la extención .inc, que debe ir guardado en la ruta "cstrike\addons\amxmodx\scripting\include" con un nombre cualquiera, yo le pondré Natives.inc, a ese archivo le ponemos esto:

Código PHP:
native native_dualuzi(id
y listo la native ya está registrada y guardada, ahora cuando se vaya a utilizar en otros plugins se debe asegurar escribir esto al principio del código

Código PHP:
#include <Natives>    //es el nombre que le pusimos al archivo .inc 

y para llamar el arma solamente escriben: native_dualuzi(id)

Bueno al saber esto ya se puede agregar la native en éste plugin para jugar gungame, para agregar un arma hay que ir a la función asignar_arma, en esa función ya hay un ejemplo con 25 armas, es decir las natives de 25 armas, cada "case" es un arma se pueden borrar o agregar tantos como quieran pero no deben tocar el que dice "default". por ejemplo:

Código PHP:
case 3: {
            if(
otro == 1native_dualuzi(id)
            else if(
otro == 2name_weapon[id] = "Dual Uzi"
            
else if(otro == 3hudweaponN[id] = "hud_weapon_dualuzi"
        


este es un "case" como dije antes,
Donde dice native_dualuzi(id) ahí se puede reemplazar por la native que quieran.
Abajo donde dice "Dual Uzi" se reemplaza por el nombre de esa arma pueden poner cualquier nombre no importa.
y el "hud_weapon_dualuzi" eso es opcional, no lo toquen, lo explico más adelante.
La cantidad de "case" va a ser la cantidad de niveles y por lo tanto de armas que va a tener el juego y eso es todo el orden de las armas es a gusto.


*Agregar el hud weapon, (la imagen que muestra la siguiente arma) (opcional)

Es sencillo, deben ir a la carpeta "sprites" y buscar un texto con el nombre de su arma por ejemplo "weapon_dualuzi.txt" (algunas armas no lo tienen, lo pueden agregar ustedes), luego lo abren y copian la línea que dice "weapon" toda la línea y solo esa linea las otras no nos sirven. por ejemplo

Código PHP:
weapon            640 640hud69    0    0    170    45 
nótese que dice 640.

luego en la misma carpeta abren el archivo hud.txt y pegan esa línea que copiaron pero al final y le cambian el nombre de "weapon" a otro:
Código:
hud_weapon_dualuzi    640 640hud69    0    0    170    45
al número de la primera línea de ese texto le suman +1 y si es 215 le ponen 216 lo guardan y listo ya pueden pegar ese nombre "hud_weapon_dualuzi" en el plugin este, para utilizar el hud

--Resumen:
Editan el sma, en la función "asignar_arma" colocan sus natives.
la función "strip_armas_nuevas" si no saben para que es la borran







Código:
edit: 4/9/19 23:50 - ahora cuando alguien gana la ronda se cambia el siguiente mapa y el juevo vuelve a empezar- requiere nextmap.amxx
11/9/19 - Ahora se reinician los valores al reiniciar la partida.
Bugs que pueden tener las armas:
estos bugs pueden aparecer por los códigos de las mismas armas, es más avanzado por lo que recomiendo usar pocas armas para no tener bugs o seguir las instrucciones.

*Que el arma desaparezca al matar una persona:
esto se produce cuando el código del arma no te permite comprar la misma arma si ya tienes una equipada, lo que sucede cuando matas a una persona y no subiste de nive, te vuelve a dar la misma arma, lo cual se soluciona quitando esa parte del código que seguramente es algo así:
Código:
public Get_dualuzi(id)
{
    if(has_dualuzi)
              client_print(id,print_chat,"ya tienes esta arma");
        return PLUGIN_CONTINUE;
....

*que el arma cambie por un arma base cuando matas:

sucede en el evento "Curweapon" cuando tenemos la estructura típica como:

Código PHP:
if(g_had_bazooka[id] && (read_data(2) == CSW_BAZOOKA)  && oldweapon[id] != CSW_BAZOOKA)
    {
        
set_pev(idpev_viewmodel2V_MODEL)
        
set_pev(idpev_weaponmodel2P_MODEL)
    }
    
oldweapon[id] = read_data(2

básicamente te está diciendo que solamente te va a actualizar los models de bazooka, si el arma que tenias anteriormente no es bazooka, por lo tanto si tenias una bazooka anteriormente y matas a alguien y no subes de nive, vuelves a tener una bazooka y no se actualizará los models...
solución:

Código PHP:
if(g_had_bazooka[id] && (read_data(2) == CSW_BAZOOKA) )
{
        
set_pev(idpev_viewmodel2V_MODEL)
        
set_pev(idpev_weaponmodel2P_MODEL)

        if(
oldweapon[id] != CSW_BAZOOKA)
        {
         
//lo que sigue del código excepto los model
         
}
}
oldweapon[id] = read_data(2

*que el hud del Score desaparezca:
esto solo lo ví con el arma laser fist, tiene un hud que muestra las municiones, hace interferencia con los canales del hud de los demas plugins.

*que te toque un arma distinta el arma base o no sea la de ése nivel:

esto es importante, Todas las armas deberían tener un nombre de entidad distinto, dado que si tienen la misma entidad de arma o weapon entity name, ahí comienzan los errores debido a que los distintos codigos de las armas nuevas comienzan a llenar de propiedades la misma arma y cuando un plugin quiere utilizar esa misma entidad de arma algunas propiedades que se le aplicaron se borran pero otras quedan produciendo los distintos bugs...

La mejor forma es cambiando en el código cada parte donde se utiliza la entidad de esa arma por otra entidad que no este usando otro plugin. por ejemplo: es común ver algo así:

Código PHP:
#define weapon_balrog "weapon_m249"
#define CSW_BALROG CSW_M249 

"CSW_M249" es el weapon index del arma base (la machine gun) que se está reemplazando por un arma nueva, o mas bien se está editando.Aca una pagina de donde sacarlas

Tambien hay que cambiar las partes donde se utilizan los models del arma base y los events del arma que estes cambiando, si es que ese codigo los utiliza.
La parte más importante y complicada, es cambiar message_begin, esto me costo darme cuenta lo que era básicamente porque no encontraba información al respecto, y es por eso que no funcionaba el cambio de entidad al %100, en fin.
Tendrán una parte del código del arma donde sale algo así :
Código PHP:
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("WeaponList"), _id)
    
write_string(weapon_balrog)    // WeaponName
    
write_byte(3)                  // PrimaryAmmoID
    
write_byte(200)                  // PrimaryAmmoMaxAmount
    
write_byte(-1)                   // SecondaryAmmoID
    
write_byte(-1)                   // SecondaryAmmoMaxAmount
    
write_byte(0)                    // SlotID (0...N)
    
write_byte(4)                    // NumberInSlot (1...N)
    
write_byte(CSW_BALROG)            // WeaponID
    
write_byte(0)                   // Flags
    
message_end() 

bueno esos número que salen ahí son específicos del arma M249, esos número deberían ser reemplazados por el arma que eligieron para que no se produzcan los conflictos y ya estaría todo. Aca hay una pagina con los valores de todas las armas

Es importante que cada arma que tengan agregada al counter sea con una entidad distinta, si tienen la misma entidad y no quieren cambiarla se puede solucionar de otra forma.
si registran una native pero en lugar de utilizar la funcion que llama el arma utilicen o creen una donde se remueve el arma. a veces simplemente funciona con cambiar un valor, un ejemplo

Código PHP:
public remove_bazooka(id)
{
       
has_bazooka[id] = 0


Muchas armas tienen una funcion parecida a esa, y si no la tiene la crean ustedes, luego que la native llame a esa funcion, y la ponen en mi código en la funcion que se llama strip_armas_nuevas(id)
Es importante que si no van a usar este método "borren todo lo relacionado con strip_armas_nuevas(id) que no es mucho, está en la línea 307 y 522"
Lo bajare para probar Thats what she said
si lo instalo si sirve oq y como lo ago