07/04/2014, 11:18 PM
(Última modificación: 17/02/2015, 10:36 PM por mongito100.)
Hola gente de Am hoy les traigo un tutorial de como hacer un mod carnge para hns
.
ESCRIPCION:.
*Carnage explicado paso por paso, donde se puede modificar por cvar los siguientes parametros:
carnage_round: Cada cuantas rondas se hace el carnage, por deafult 5
carnage_mod: Modo carnage, 0 aleatorio ,1 votacion por default 0
carnage_tiempovotacion: Tiempo de votacion, default 10
*El carnage puede ser aleatorio o por votacion, en caso de ser votacion el maximo de mods q se podran votar son 4
*Soporte para agregar mas mods a elecion con posibilidad para activar el cuchillo o el onlyheadshoot
Bueno espero que les agrade, desde ya si encuentran algun bug o se me paso explicar algo notifiquen q lo editare en cuanto me conecte
Aca adjunto los csw_ y los weapons por si quieren agregar mas mods
Informacion sacada de:https://forums.alliedmods.net/showthread.php?p=308210
.

*Carnage explicado paso por paso, donde se puede modificar por cvar los siguientes parametros:
carnage_round: Cada cuantas rondas se hace el carnage, por deafult 5
carnage_mod: Modo carnage, 0 aleatorio ,1 votacion por default 0
carnage_tiempovotacion: Tiempo de votacion, default 10
*El carnage puede ser aleatorio o por votacion, en caso de ser votacion el maximo de mods q se podran votar son 4
*Soporte para agregar mas mods a elecion con posibilidad para activar el cuchillo o el onlyheadshoot
Bueno espero que les agrade, desde ya si encuentran algun bug o se me paso explicar algo notifiquen q lo editare en cuanto me conecte
Código PHP:
#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#define PLUGIN "Carnage hns"
#define VERSION "1.2"
#define AUTHOR "Mongito100"
//Version 1.1 Agregado hud
//Version 1.2 fix bug carnage aleatorio
new g_maxplayers //Varible q nos dira el maximo numero de jugadores del sv
new g_Carnage //Varible que nos indicara si es carngae o no
new g_Round //Varible q se encargara de contar las rondas para saber si es carnage
new g_Modcarnage//Variable para saber el mod carnage
new CvarTiempovotacion//Aqui se almacenara la cvar para cambiar el tiempo de votacion
new CvarRoundCarnage //Aqui se almacenara la cvar para cambiar cada cuantas rondas se realiza el carnage
new CvarModCarnage
/*
Aqui se almacenara la cvar para cambiar el mod carnage
Cuando esta en 0 el carnage es aleatorio
Cuando esta en 1 el carnage es por votacion
*/
new g_Envotacion//Variable para saber si estan votando
new g_TiempoVote//Varible que decrementara para ir mostrando cuanto tiempo queda para finalizar la votacion
new g_OpcionVotada[4]//Variable para saber la opcion q se voto
new g_OpcionesAzar[4] //Variable para obtener 4 mods al azar en caso de tenerse mas de 4
new Hudconteo//Variable para la sincronizacion del hud
new Hudcarnage//Variable para la sincronizacion del hud
new g_azar//Variable para elegir un carnage al azar
enum _:PACK_CARNAGE
{
NAME[10],
WEAPON[18],
CSW,
CARGADOR,
CUCHI,
HEADSHOOT,
}
new g_Packcarnage[][PACK_CARNAGE] =// Aca configuraremos como queremos que sea el carnage
{
// Nombre weapon del arma csw del arma cargador si tienen cuchi si es only headshoot
{ "DEAGLE", "weapon_deagle", CSW_DEAGLE, 100, 0, 1 },
{ "AWP", "weapon_awp", CSW_AWP, 40, 0, 0 },
{ "M3", "weapon_m3", CSW_M3, 30, 1, 0 },
{ "AK-47", "weapon_ak47", CSW_AK47, 120, 1, 1 },
{ "NAVY MP5", "weapon_mp5navy", CSW_MP5NAVY, 120, 0, 0 }
}
new g_CantidadMods = sizeof g_Packcarnage//Variable para saber la la cantidad de mods
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV" , "round_start" , "a", "1=0", "2=0")//Registramos el comienzo de la ronda
register_logevent("round_end", 2, "1=Round_End")//Registramos cuando finaliza la ronda
RegisterHam( Ham_Spawn, "player", "fw_player_spawn" ,1) //Registramos cuando un jugador spawnea
register_clcmd("say /carnage" ,"cmd_mensajecaranage")//Registramos el /carnagee para informar cuantas rondas faltan
Hudconteo = CreateHudSyncObj()
Hudcarnage= CreateHudSyncObj()
CvarRoundCarnage = register_cvar("carnage_round", "5")
CvarModCarnage = register_cvar("carnage_mod", "0")
CvarTiempovotacion = register_cvar("carnage_tiempovotacion", "10")
g_maxplayers = get_maxplayers( )
set_task(1.0, "ShowHUD", _, _, _, "b")//Creamos un task continuo para avisar cuantas rondas quedan para el carnage
}
public round_start()
{
g_Carnage = 0 //Desimos q no es carnage seteandola esta variable en 0
g_Round++//Incrementamos el contador de rondas
if(get_pcvar_num(CvarModCarnage) && g_Round+1 == get_pcvar_num(CvarRoundCarnage))
VoteCarnage()//Si el carnage es por votacion y la ronda siguiente es carnage se envia la votacion
if(g_Round == get_pcvar_num(CvarRoundCarnage))//Si la ronda es carnage...
{
g_Carnage = 1//Seteamos la variable indicadora de carnage en 1
g_Round = 0//Reseteamos el contador de rondas
set_cvar_num("amx_ltm", 0)//Desactivamos los lasers
set_cvar_num("hns_hiders_knife", 2)//Le damos cuchicho a los tt
set_cvar_num("hns_hiders_flashbangs", 0)//Les sacamos las flash a los tt
set_cvar_num("hns_hiders_smokegren", 0)//Les sacamos las congeladoras a los tt
}
}
public round_end()
{
if(g_Round+1 == get_pcvar_num(CvarRoundCarnage))//Si la proxima ronda es carnage
set_cvar_num("hns_hidetime", 0)//Desactivo el tiempo para esconderse
//NOTA:Lo hago aca para evitar bugs
if(g_Carnage)//Si ya termino el carnage volvemos a los valores por default
{
set_cvar_num("amx_ltm", 1)
set_cvar_num("hns_hidetime", 10)
set_cvar_num("hns_hiders_knife", 1)
set_cvar_num("hns_hiders_flashbangs", 2)
set_cvar_num("hns_hiders_smokegren", 1)
set_user_hitzones(0, 0, 255)
}
g_azar = 0
}
public fw_player_spawn(id)
if(is_user_alive(id))
set_task(2.0,"chequear_carnage",id+100)
/*Hacemos que chequee en 2 seg si es carnage, algunos se preguntaran por q aca y no en el round start, la respuesta es
simple por q si alguien entra al sv cuando ya comenzo la ronda y aparece vivo no se le setearian las armas del carnage*/
public cmd_mensajecaranage(id)
{
if(g_Carnage)//Si es carnage le informamos q carnage es y si es only headshoot
client_print(id,print_chat,"Es carnage %s %s",g_Packcarnage[g_Modcarnage][NAME],g_Packcarnage[g_Modcarnage][HEADSHOOT] ? "Only Headshoot":"")
else//Si no le informamos cuantas rondas faltan
client_print(id,print_chat,"Faltan %d ronda%s para carnage",get_pcvar_num(CvarRoundCarnage)-g_Round ,get_pcvar_num(CvarRoundCarnage)-g_Round == 1 ? "" :"s")
}
public ShowHUD()
{
if(!g_Carnage)
{
set_hudmessage(0, 50, 100, -1.0, 0.06, 1, 1.0, 1.0, 1.0, 1.0)
ShowSyncHudMsg(0, Hudcarnage, "Falta%s %d ronda%s para carnage", get_pcvar_num(CvarRoundCarnage) - g_Round > 1 ? "n" : "", get_pcvar_num(CvarRoundCarnage) - g_Round , get_pcvar_num(CvarRoundCarnage) - g_Round > 1 ? "s" : "")
}
}
public VoteCarnage()
{
new VoteTipoCarnage = menu_create("\r Elegir el mod carnage", "handle_votecarnage"),temp[2]
if( g_CantidadMods > 3)//Si hay mas de 4 mods carnage
{
g_OpcionesAzar = generar_voteazar()//Elijo al azar entre 4 de ellas
for(new i= 0;i<3;i++)//agrego cada mod a la votacion
{
num_to_str(i,temp,2)
menu_additem(VoteTipoCarnage ,g_Packcarnage[g_OpcionesAzar[i]][NAME],temp)
}
}
else //si no...
{
for(new i = 0; i < sizeof g_Packcarnage; i++)//agrego cada mod a la votacion
{
num_to_str(i,temp,2)
menu_additem(VoteTipoCarnage ,g_Packcarnage[i][NAME],temp)
}
}
for( new i = 1; i <= g_maxplayers; i++ ) //Muestro el menu de votacion a todos los jugadores conectados
if( is_user_connected( i ) )
menu_display( i, VoteTipoCarnage)
g_Envotacion = 1 //Comenzo la votacion
//Muestro un hud con la cantidad de segundos restantes para finalizar la votacion
set_hudmessage(0,255,0,0.0, 0.70,_,1.0,1.0,1.0,1.0)
ShowSyncHudMsg(0,Hudconteo,"La votacion finalizara en %d segundos",get_pcvar_num(CvarTiempovotacion))
g_TiempoVote = get_pcvar_num(CvarTiempovotacion)
set_task(1.0, "Votefinalizado",_,_,_, "a", get_pcvar_num(CvarTiempovotacion)+1)
//Hago que se llame a la funcion la cantidad de segundos q debe contar + 1 para q finalice la votacion
}
public handle_votecarnage( id, iMenu, item )
{
if( !g_Envotacion)
return
new iData[6], iAccess, iCallback,iName[64],szName[33]
menu_item_getinfo( iMenu, item, iAccess, iData,5, iName, 63, iCallback )
get_user_name(id,szName,charsmax(szName))
g_OpcionVotada[ str_to_num( iData ) ]++
client_print(0,print_chat, "El juagador %s a votado carnage %s",szName,iName)
}
public Votefinalizado()
{
if(g_TiempoVote)//Mientras que el tiempo de votacion sea mayor a 0
{
g_TiempoVote--//Se resta 1 seg
//Muestro un hud con la cantidad de segundos restantes para finalizar la votacion
set_hudmessage(0,255,0,0.0, 0.70,_,1.0,1.0,1.0,1.0)
show_hudmessage(0, "La votacion finalizara en %d segundos",g_TiempoVote)
return
}
g_Envotacion = 0 //Finalizo la votacion
new Opcionganadora = 0
for( new a = 0; a < 4; a++ )//Verifico cual es la opcion que fue seleccionada mas veces
if( g_OpcionVotada[ Opcionganadora ] < g_OpcionVotada[ a ] )
Opcionganadora = a
for(new i=0 ;i<4; i++)//Restablesco las opciones votadas a 0 para el proximo vote
g_OpcionVotada[i]=0
if( g_CantidadMods > 3)//Si hay mas de 4 mods carnage
g_Modcarnage = g_OpcionesAzar[Opcionganadora]
else//Si no
g_Modcarnage = Opcionganadora
client_print(0,print_chat, "Ha ganado el Carnage %s",g_Packcarnage[g_Modcarnage][NAME])
}
public generar_voteazar()
{
new eleccion[4]
for(new i=0;i<4;i++)
eleccion[i] = random_num(0,g_CantidadMods)//Generamos un numero al azar entre 0 y el maximo de mods carnage
while(eleccion[0] == eleccion[1])//Mientras que la primera eleccion sea igual a la segunda...
eleccion[1] = random_num(0,g_CantidadMods)//Volvemos a generar un numero al azar
while(eleccion[0] == eleccion[2] || eleccion[1] == eleccion[2] )//Mientras que la tercera eleccion sea igual a la primera o a la segunda...
eleccion[2] = random_num(0,g_CantidadMods)//Volvemos a generar un numero al azar
while(eleccion[0] == eleccion[3] || eleccion[1] == eleccion[3] || eleccion[2] == eleccion[3] )//Mientras que la cuarta eleccion sea igual a la primera o a la segunda o a la tercera...
eleccion[2] = random_num(0,g_CantidadMods)//Volvemos a generar un numero al azar
return eleccion//Devolvemos el vector con los numeros al azar diferentes entre si
}
public chequear_carnage(id)
{
if(!g_Carnage )//Si no es carnage volvemos
return
if(!get_pcvar_num(CvarModCarnage) && !g_azar)//Si es carnage aleatorio y todavia no se desidio el mod...
{
g_azar = 1
g_Modcarnage= random_num(0,g_CantidadMods)//Generamos un numero al azar entre 0 y el maximo de mods carnage
}
id-=100
strip_user_weapons(id)//Le sacamos todas las armas hasta el cuchi
if(g_Packcarnage[g_Modcarnage][CUCHI])//Si el mod es con cuchi...
give_item(id,"weapon_knife")
if(g_Packcarnage[g_Modcarnage][HEADSHOOT])//Si el mod es headshoot...
set_user_hitzones(id,0,2)
//Le damos el arma del mod carnage
give_item(id, g_Packcarnage[g_Modcarnage][WEAPON])
cs_set_user_bpammo(id, g_Packcarnage[g_Modcarnage][CSW],g_Packcarnage[g_Modcarnage][CARGADOR])
//Mostramos un hud para informar que es carnage
set_hudmessage(0, 50, 100, -1.0, 0.06, 1, 1.0, 1.0, 1.0, 1.0)
show_hudmessage(id, "Es carnage %s %s",g_Packcarnage[g_Modcarnage][NAME],g_Packcarnage[g_Modcarnage][HEADSHOOT] ? "Only Headshoot":"")
}
Aca adjunto los csw_ y los weapons por si quieren agregar mas mods
Código PHP:
Index Name Number Ammo Weapon Clips
CSW_P228 1 give_item(id,"ammo_357sig") give_item(id, "weapon_p228") CLIP SIZE/BP SIZE: 13/52
==================================================================================================================================
CSW_SCOUT 3 give_item(id,"ammo_762nato") give_item(id, "weapon_scout") CLIP SIZE/BP SIZE: 10/90
==================================================================================================================================
CSW_XM1014 5 give_item(id,"ammo_buckshot") give_item(id, "weapon_xm1014") CLIP SIZE/BP SIZE: 7/32
==================================================================================================================================
CSW_MAC10 7 give_item(id,"ammo_45acp") give_item(id, "weapon_mac10") CLIP SIZE/BP SIZE: 30/100
==================================================================================================================================
CSW_AUG 8 give_item(id,"ammo_556nato") give_item(id, "weapon_aug") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_ELITE 10 give_item(id,"ammo_9mm") give_item(id, "weapon_elite") CLIP SIZE/BP SIZE: 30/120
==================================================================================================================================
CSW_FIVESEVEN 11 give_item(id,"ammo_57mm") give_item(id, "weapon_fiveseven") CLIP SIZE/BP SIZE: 20/100
==================================================================================================================================
CSW_UMP45 12 give_item(id,"ammo_45acp") give_item(id, "weapon_ump45") CLIP SIZE/BP SIZE: 25/100
==================================================================================================================================
CSW_SG550 13 give_item(id,"ammo_556nato") give_item(id, "weapon_sg550") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_GALI 14 give_item(id,"ammo_556nato") give_item(id, "weapon_gali") CLIP SIZE/BP SIZE: 35/90
==================================================================================================================================
CSW_FAMAS 15 give_item(id,"ammo_556nato") give_item(id, "weapon_famas") CLIP SIZE/BP SIZE: 25/90
==================================================================================================================================
CSW_USP 16 give_item(id,"ammo_45acp") give_item(id, "weapon_usp") CLIP SIZE/BP SIZE: 12/100
==================================================================================================================================
CSW_GLOCK18 17 give_item(id,"ammo_9mm") give_item(id, "weapon_glock18") CLIP SIZE/BP SIZE: 20/120
==================================================================================================================================
CSW_AWP 18 give_item(id,"ammo_338magnum") give_item(id, "weapon_awp") CLIP SIZE/BP SIZE: 10/30
==================================================================================================================================
CSW_MP5NAVY 19 give_item(id,"ammo_9mm") give_item(id, "weapon_mp5navy") CLIP SIZE/BP SIZE: 30/120
==================================================================================================================================
CSW_M249 20 give_item(id,"ammo_556nato") give_item(id, "weapon_m249") CLIP SIZE/BP SIZE: 100/200
==================================================================================================================================
CSW_M3 21 give_item(id,"ammo_buckshot") give_item(id, "weapon_m3") CLIP SIZE/BP SIZE: 8/32
==================================================================================================================================
CSW_M4A1 22 give_item(id,"ammo_556nato") give_item(id, "weapon_m4a1") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_TMP 23 give_item(id,"ammo_9mm") give_item(id, "weapon_tmp") CLIP SIZE/BP SIZE: 30/120
==================================================================================================================================
CSW_G3SG1 24 give_item(id,"ammo_762nato") give_item(id, "weapon_g3sg1") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_DEAGLE 26 give_item(id,"ammo_50ae") give_item(id, "weapon_deagle") CLIP SIZE/BP SIZE: 7/35
==================================================================================================================================
CSW_SG552 27 give_item(id,"ammo_556nato") give_item(id, "weapon_sg552") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_AK47 28 give_item(id,"ammo_762nato") give_item(id, "weapon_ak47") CLIP SIZE/BP SIZE: 30/90
==================================================================================================================================
CSW_P90 30 give_item(id,"ammo_57mm") give_item(id, "weapon_p90") CLIP SIZE/BP SIZE: 50/100
__________________________________________________________________________________________________________________________________
DEFUSE KIT give_item(id, "item_thighpack")
----------------------------------------------------------------------------------------------------------------------------------
NVGS give_item(id, "item_nvgs")
----------------------------------------------------------------------------------------------------------------------------------
SHIELD give_item(id, "weapon_shield")
----------------------------------------------------------------------------------------------------------------------------------
CSW_C4 6 give_item(id, "weapon_c4") BP SIZE: 1
----------------------------------------------------------------------------------------------------------------------------------
CSW_VEST 31 give_item(id, "item_kevlar")
----------------------------------------------------------------------------------------------------------------------------------
CSW_VESTHELM 32 give_item(id, "item_assaultsuit")
----------------------------------------------------------------------------------------------------------------------------------
CSW_HEGRENADE 4 give_item(id, "weapon_hegrenade") BP SIZE: 1
----------------------------------------------------------------------------------------------------------------------------------
CSW_FLASHBANG 25 give_item(id, "weapon_flashbang") BP SIZE: 2
----------------------------------------------------------------------------------------------------------------------------------
CSW_SMOKEGRENADE 9 give_item(id, "weapon_smokegrenade") BP SIZE: 1
----------------------------------------------------------------------------------------------------------------------------------
[TUT] Carnage
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Fight
"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"
Anónimo