13/02/2020, 02:57 AM
(Última modificación: 13/02/2020, 03:02 AM por TuboRojo :v. Edited 3 times in total.)
Estuve poniendo este menú de armas a mi zp 4.3 pero da 1 error en la parte de replace_weapon_models(id, weaponid)
Revise los otros codes y parecen estar bien, sera que no se como va ahí esta parte del code
EDIT; este sistema de armas le puse
Código:
// C:\hlserver\cstrike\addons\amxmodx\scripting\zombie_plague40.sma(8337) : error 002: only a single statement (or expression) can follow each "case"
// C:\hlserver\cstrike\addons\amxmodx\scripting\zombie_plague40.sma(8337 -- 8338) : error 028: invalid subscript (not an array or too many subscripts): "weaponid"
// C:\hlserver\cstrike\addons\amxmodx\scripting\zombie_plague40.sma(8337 -- 8339) : error 001: expected token: "}", but found "if"
// C:\hlserver\cstrike\addons\amxmodx\scripting\zombie_plague40.sma(8337 -- 8339) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
Revise los otros codes y parecen estar bien, sera que no se como va ahí esta parte del code
Código PHP:
/* Buscan replace_weapon_models(id, weaponid)
y abajo del switch ponen lo siguiente */
if(weaponid == menu_death[g_arma_prim[id]][item_id]) // si la arma que tiene == a la del menu que el habia obtenido
{
if(!equal(menu_death[g_arma_prim[id]][item_modelo] , "default"))// Si no es default le damos el modelo
set_pev(id , pev_viewmodel2 , menu_death[g_arma_prim[id]][item_modelo])
if(!equal(menu_death[g_arma_prim[id]][item_modelo_2] , "default"))
set_pev(id , pev_weaponmodel2 , menu_death[g_arma_prim[id]][item_modelo_2])// Si no es default le damos el modelo
}
EDIT; este sistema de armas le puse
Código PHP:
/*
Menu De Armas Por BlackFur
Requerimientos : Sistema de Nivel Basico
*/
/* Primero Paso
Descripcion : Creamos el enum para darle una etiqueta a la const menu_death ,
y unas defines para luego usarlas.
"default" significa que no tendra ningun modelo en especial el cual no sera precacheado luego.
*/
#define TAG "^x04[ZP]^x01"
#define UDEAD "Solo cuando estes vivo"
#define is_human(%1) (!g_zombie[%1] && !g_survivor[%1] && !g_sniper[%1])
enum _:menu_dm
{
item_name_v2[90] , // nombre de la arma (menu)
item_id , // id = CSW_
item_csname[90] , // nombre (cs) weapon_
red , // color rojo del efecto
green , // color verde del ""
blue , // "" azul del ""
Float:item_damage , // Damage
item_level , // Level
item_modelo[90] , // Modelo v_
item_modelo_2[90] // Modelo p_
}
new const menu_death[][menu_dm] =
{
{ "MAC 10" , CSW_MAC10 , "weapon_mac10" , 0 , 0 , 0 , 1.0 , 1 , "default" , "default"} ,
{ "Sniper Awp AE2" , CSW_AWP , "weapon_awp" , 255 , 255 , 0 , 8.0 , 2 , "models/zp/v_awp_sniper.mdl" , "models/zp/p_awp_sniper.mdl" }
}
/* Segundos Paso
Descripcion : Creacion de algunas variables.
1.- usada para el menu
2.- usada para guardar la seleccion automatica y el arma anterior
3.- similar a la segunda pero esta puede ser usada para dar x arma a un survivor o algo , asi
no se cambia la seleccion anterior.
*/
new menu_armas
new g_save_weapons[33][2]
new g_arma_prim[33]
new Trie:g_tClaseSprite
new g_trace
/* Tercer Paso
Descripcion : Precacheamos los modelos que usaremos y un efecto aportado por DJHD.
Aqui el equal es usado para saber si el modelo es default y asi no precachearlo , razon de
esto ya que el cs tiene un limite de precache con esto se ahorra.
*/
public plugin_precache()
{
for(new i = 0 ; i < sizeof menu_death ; i++)
{
if(!(equal(menu_death[i][item_modelo] , "default")))
precache_model(menu_death[i][item_modelo])
if(!(equal(menu_death[i][item_modelo_2] , "default")))
precache_model(menu_death[i][item_modelo_2])
}
g_tClaseSprite = TrieCreate()
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
TrieSetCell(g_tClaseSprite, "worldspawn", 1)
RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
TrieSetCell(g_tClaseSprite, "player", 1)
register_forward(FM_Spawn, "Spawn", 1)
g_trace = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr")
}
/* Creamos el Menu
Descripcion: tenia 3 opciones para las pistolas secundarias , pero lo saque ya que no se los dejare
todo en bandeja.
*/
public show_menu_selec(id)
{
new menu_selec_arm = menu_create("\y[\rS\y]eleccion de Armas" , "handler_selec_arm")
menu_additem(menu_selec_arm , "\yEscoger Primarias" , "1")
if(g_save_weapons[id][0])
menu_additem(menu_selec_arm , "\yRecordar Armas\r [Activado]" , "2")
else
menu_additem(menu_selec_arm , "\yRecordar Armas\r [Desactivado]" , "2")
menu_setprop(menu_selec_arm , MPROP_EXITNAME,"\ySalir")
menu_display(id, menu_selec_arm , 0)
return PLUGIN_HANDLED
}
public handler_selec_arm(id , menu_selec_arm , item)
{
if(item == MENU_EXIT || !is_user_alive(id))
return PLUGIN_HANDLED
if(!is_human(id))
{
zp_colored_print(id , "%s Solo Para^x04 Humanos." , TAG)
return PLUGIN_HANDLED
}
switch(item)
{
case 0 :
{
if(g_canbuy[id])
show_menu_armas(id+TASK_SPAWN , 0)
else
zp_colored_print(id , "%s Ya Has Comprado Tus Armas^x04 Primarias." , TAG)
}
case 1 :
{
if(g_save_weapons[id][0])
g_save_weapons[id][0] = false
else
g_save_weapons[id][0] = true
g_save_weapons[id][1] = -1
/* -1 es para que no de ninguna arma */
show_menu_selec(id)
zp_colored_print(id , "%s Has^x04 %s^x01 Tu^x04 AutoSeleccion." , TAG ,g_save_weapons[id][0] ? "Activado" : "Desactivado")
}
}
return PLUGIN_HANDLED
}
public show_menu_armas(taskid , page)
{
new id = ID_SPAWN
new len[999] , temp[22]
if(can_buy(id)) // es para chequear algunas condiciones
return PLUGIN_HANDLED
menu_armas = menu_create("\y[\rA\y]rmas Primarias" , "handler_primarias")
if(g_save_weapons[id][0]) // Si Tiene Su Auto-Seleccion
{
if(g_save_weapons[id][1] != -1) // No es igual a -1 por lo de arriba
{
handler_primarias(id , menu_armas , g_save_weapons[id][1])
return PLUGIN_HANDLED
/*
Llamamos directo al handler y returneamos.
*/
}
}
for(new i = 0 ; i < sizeof menu_death ; i++)
{
if(g_level[id] >= menu_death[i][item_level])
formatex(len , charsmax(len) , "\y%s \r[Disponible]" , menu_death[i][item_name_v2])
else
formatex(len , charsmax(len) , "\d%s \r[Nivel Requerido : %d]" , menu_death[i][item_name_v2] , menu_death[i][item_level])
num_to_str(i,temp, 2)
menu_additem(menu_armas , len , temp)
}
menu_setprop(menu_armas , MPROP_BACKNAME,"\yAtras")
menu_setprop(menu_armas , MPROP_NEXTNAME,"\ySiguiente")
menu_setprop(menu_armas , MPROP_EXITNAME,"\ySalir")
menu_display(id, menu_armas , page)
return PLUGIN_HANDLED
}
public handler_primarias(id , menu_armas , item)
{
if(item == MENU_EXIT || !is_user_alive(id))
{
menu_destroy(menu_armas)
return PLUGIN_HANDLED
}
if(can_buy(id))
return PLUGIN_HANDLED
new page , armas_2 // Obtenemos la pagina del menu para luego abrir hay mismo
player_menu_info(id , menu_armas , armas_2 , page)
if(g_level[id] >= menu_death[item][item_level]) // Nivel Mayor al Requerido
{
g_arma_prim[id] = item // guardamos el item en esta variable
g_save_weapons[id][1] = item // guardamos el item en este variable
drop_weapons(id , 1) // le botamos su arma primaria
fm_give_item(id , menu_death[item][item_csname]) // le damos el item
ExecuteHamB(Ham_GiveAmmo, id, MAXBPAMMO[menu_death[item][item_id]], AMMOTYPE[menu_death[item][item_id]], MAXBPAMMO[menu_death[item][item_id]])
g_canbuy[id] = false // para que no pueda volver a abrir el menu
}
else
{
zp_colored_print(id , "%s Necesitas Ser Nivel %d Para Comprar Esta Arma." , TAG , menu_death[item][item_level])
show_menu_armas(id+TASK_SPAWN , page) // Aqui le abrimos el menu de nuevo pero con la pagina que estaba viendo
}
return PLUGIN_HANDLED
}
can_buy(id)
{
if(!is_user_alive(id))
{
zp_colored_print(id , "%s %s." , TAG , UDEAD)
return PLUGIN_HANDLED
}
if(!is_human(id))
{
zp_colored_print(id , "%s Solo Para^x04 Humanos." , TAG)
return PLUGIN_HANDLED
}
if(!g_canbuy[id])
{
zp_colored_print(id , "%s Ya Has Comprado Tu Arma^x04 Primarias." , TAG)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
/* Cuarto Paso
Descripcion: Setear Damage , Modelos y Efectos
La parte de los efectos no la podre explicar ya que no fue hecha por mi
*/
/* Buscan replace_weapon_models(id, weaponid)
y abajo del switch ponen lo siguiente */
if(weaponid == menu_death[g_arma_prim[id]][item_id]) // si la arma que tiene == a la del menu que el habia obtenido
{
if(!equal(menu_death[g_arma_prim[id]][item_modelo] , "default"))// Si no es default le damos el modelo
set_pev(id , pev_viewmodel2 , menu_death[g_arma_prim[id]][item_modelo])
if(!equal(menu_death[g_arma_prim[id]][item_modelo_2] , "default"))
set_pev(id , pev_weaponmodel2 , menu_death[g_arma_prim[id]][item_modelo_2])// Si no es default le damos el modelo
}
/* Ahora buscan
// Attacker is human...
if (!g_zombie[attacker])
*/
if(g_currentweapon[attacker] == menu_death[g_arma_prim[attacker]][item_id]) // Arma que tiene == a la arma que obtuvo del menu
SetHamParamFloat(4 , damage *= menu_death[g_arma_prim[attacker]][item_damage]) // le damos el damage de dicha arma
/* Al final del plugin */
public Spawn(iEnt)
{
static szClassName[32]
pev(iEnt, pev_classname, szClassName, charsmax(szClassName))
if(pev_valid(iEnt))
{
if(!TrieKeyExists(g_tClaseSprite, szClassName))
{
RegisterHam(Ham_TraceAttack, szClassName, "TraceAttack", 1)
TrieSetCell(g_tClaseSprite, szClassName, 1)
}
}
}
public plugin_end()
{
TrieDestroy(g_tClaseSprite)
}
public TraceAttack(victim, attacker, Float:damage, Float:direction[3], iTr, damage_type)
{
if (!is_user_alive(attacker) && !is_user_connected(attacker))
return HAM_IGNORED
if(get_user_weapon(attacker) == CSW_KNIFE)
return HAM_IGNORED
new Float:vecEndPos[3]
get_tr2(iTr, TR_vecEndPos, vecEndPos)
new origin[3]
get_user_origin(attacker , origin)
new weapon = get_user_weapon(attacker)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEndPos, 0)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
engfunc(EngFunc_WriteCoord, vecEndPos[0])
engfunc(EngFunc_WriteCoord, vecEndPos[1])
engfunc(EngFunc_WriteCoord, vecEndPos[2])
write_short(g_trace)
write_byte (1)
write_byte (10)
write_byte (1)
write_byte (10)
write_byte(0)
if(weapon == menu_death[g_arma_prim[attacker]][item_id])
{
write_byte(menu_death[g_arma_prim[attacker]][red])
write_byte(menu_death[g_arma_prim[attacker]][green])
write_byte(menu_death[g_arma_prim[attacker]][blue])
}
else
{
write_byte(0)
write_byte(0)
write_byte(0)
}
write_byte(random_num(150 , 200))
write_byte(0)
message_end()
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos , 0)
write_byte(TE_DLIGHT) // TE id
engfunc(EngFunc_WriteCoord, vecEndPos[0])
engfunc(EngFunc_WriteCoord, vecEndPos[1])
engfunc(EngFunc_WriteCoord, vecEndPos[2])
write_byte(5)
if(weapon == menu_death[g_arma_prim[attacker]][item_id])
{
write_byte(menu_death[g_arma_prim[attacker]][red])
write_byte(menu_death[g_arma_prim[attacker]][green])
write_byte(menu_death[g_arma_prim[attacker]][blue])
}
else
{
write_byte(0)
write_byte(0)
write_byte(0)
}
write_byte(10)
write_byte(10)
message_end()
return HAM_IGNORED
}
/* En reset_vars(id , all)*/
if (resetall)
{
// Code
// Code
// Code
g_save_weapons[id][0] = 0
g_save_weapons[id][1] = -1
g_arma_prim[id] = 0
}