07/04/2021, 10:28 PM
(Última modificación: 07/04/2021, 11:16 PM por RandroidS. Edited 4 times in total.)
el menu funciona si no cumplo con los requisitos de nivel y reset me muestra que estan bloqueados, pero al escoger si me deja y me da al humano que selecciono,
solo con niveles funciona, yo le agregue los resets pero no me funciono xd, cuando lo probé tenia nivel 10, y reset 0
solo con niveles funciona, yo le agregue los resets pero no me funciono xd, cuando lo probé tenia nivel 10, y reset 0
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <humanoplague>
#include <engine>
#include <fun>
#include <xs>
#define PLUGIN "Clases Humanas C/Restriccion"
#define VERSION "2.0"
#define AUTHOR "~3MCy Daimon't~>"
#define T4G "[T4G]"
new g_pushed_class[33] , g_class_pre[33]
new g_conectado[33]
new g_msgSayText, g_msgHostageAdd , g_msgHostageDel, g_MaxPlayers
new Float: cl_pushangle[33][3]
new weapon_name[24]
new jumpdoz[33][2]
const WEAPONS_BITSUM = (1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4)
enum {
CLASICO = 0 ,
BERSERKER ,
ATLETA ,
ASTRONAUTA ,
MULTIJUMP ,
TIRADOR ,
AURA ,
RADAR ,
NINJA ,
PRECISO
}
enum _:human_class {
class_name[90],
class_ability[90],
class_level,
v_model[90],
p_model[90],
class_Reset
}
new const human_clase[][human_class] = {
{"Humano Clasico", "Ninguna Abilidad", 0, "models/v_knife.mdl", "models/p_knife.mdl", 1},
{"Humano Berseker", "x3 Damage Cuchillos", 5, "models/v_berserker_knife.mdl", "models/p_berserker_knife.mdl", 2},
{"Humano Atleta", "+Rapido", 10, "models/v_atleta_knife.mdl", "models/p_atleta_knife.mdl", 3},
{"Humano Astronauta", "+Gravedad", 15, "models/v_astronauta_knife.mdl", "models/p_astronauta_knife.mdl", 3},
{"Humano MultiJump", "Triple Salto", 20, "models/v_multijump_knife.mdl", "models/p_multijump_knife.mdl", 4},
{"Humano Preciso", "Semi-Recoil", 25, "models/v_preciso_knife.mdl", "models/p_preciso_knife.mdl", 4},
{"Humano Iluminado", "Aura Luminoza", 29, "models/v_iluminado_knife.mdl", "models/p_iluminado_knife.mdl", 5},
{"Humano Rastreador", "Zombie en Radar", 10, "models/v_rastreador_knife.mdl", "models/p_rastreador_knife.mdl", 0},
{"Humano Ninja", "Silencioso +Gravedad", 15, "models/v_ninja_knife.mdl", "models/p_ninja_knife.mdl", 0},
{"Humano Tirador", "x2 Damage HeadShot", 40, "models/v_tirador_knife.mdl", "models/p_tirador_knife.mdl", 0}
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event( "CurWeapon", "Ev_CurWeapon", "be", "1=1" )
RegisterHam(Ham_Spawn , "player" , "Fw_PlayerSpawn")
RegisterHam(Ham_TakeDamage, "player", "Fw_TakeDamage")
register_forward(FM_PlayerPreThink, "Fw_PlayerPreThink")
register_clcmd("say /clase", "menu_hclasses")
g_MaxPlayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
g_msgHostageAdd = get_user_msgid("HostagePos")
g_msgHostageDel = get_user_msgid("HostageK")
set_task (1.0,"radar_scan",_,_,_,"b");
for (new i = 1; i <= 30; i++) {
if (!(WEAPONS_BITSUM & 1 << i) && get_weaponname(i, weapon_name, 23)) {
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Pre")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Post", 1)
}
}
}
public plugin_natives()
{
register_native("clasehumanos", "menu_hclasses", 1)
}
public plugin_precache() {
for( new i = 0; i < sizeof human_clase; i++ ) precache_model( human_clase[i][v_model] )
for( new i = 0; i < sizeof human_clase; i++ ) precache_model( human_clase[i][p_model] )
}
public client_putinserver(id) {
g_conectado[id] = 1
jumpdoz[id][0] = 0
jumpdoz[id][1] = 0
}
public client_disconnect(id) {
g_conectado[id] = 0
jumpdoz[id][0] = 0
jumpdoz[id][1] = 0
}
public Fw_PlayerPreThink(id) {
if(zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return
if(is_user_alive(id)){
if(g_pushed_class[id] == ATLETA)
set_pev(id, pev_maxspeed, 290.0)
if(g_pushed_class[id] == ASTRONAUTA || g_pushed_class[id] == NINJA)
set_pev(id, pev_gravity, 0.6)
if(g_pushed_class[id] == NINJA)
set_pev(id, pev_flTimeStepSound, 999);
if(g_pushed_class[id] == AURA)
set_pev(id, pev_effects, pev(id, pev_effects) | EF_BRIGHTLIGHT)
}
}
public Fw_PlayerSpawn(id) {
g_pushed_class[id] = g_class_pre[id]
colored_print(id, "^x04%s^x01 Este server corre con^x04 Clases Humanas V2.0^x01 , Escribe^x04 /clase^x01 para seleccionar tu^x04 clase de Humano", T4G)
}
public fw_Weapon_PrimaryAttack_Post(entity) {
new id = pev(entity, pev_owner)
if (!zp_get_user_zombie( id ) && is_user_alive ( id ) && g_pushed_class[id] == TIRADOR) {
new Float: push[3]
pev(id, pev_punchangle, push)
xs_vec_sub(push, cl_pushangle[id], push)
xs_vec_mul_scalar(push, 0.4 , push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
return HAM_IGNORED;
}
return PLUGIN_HANDLED
}
public fw_Weapon_PrimaryAttack_Pre(entity) {
new id = pev(entity, pev_owner)
if (!zp_get_user_zombie(id) && is_user_alive ( id ) && g_pushed_class[id] == TIRADOR) {
pev(id, pev_punchangle, cl_pushangle[id])
return HAM_IGNORED;
}
return HAM_IGNORED;
}
public client_PreThink(id) {
if(!is_user_alive(id) || zp_get_user_zombie(id))
return PLUGIN_CONTINUE
if(zp_get_user_nemesis(id) || zp_get_user_survivor(id))
return PLUGIN_CONTINUE
new nzbut = get_user_button(id)
new ozbut = get_user_oldbutton(id)
if(g_pushed_class[id] == MULTIJUMP && (nzbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(ozbut & IN_JUMP)) {
if(jumpdoz[id][0] < 2) {
jumpdoz[id][1] = 1
jumpdoz[id][0]++
return PLUGIN_CONTINUE
}
}
if((nzbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND)) {
jumpdoz[id][0] = 0
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public client_PostThink(id) {
if(zp_get_user_nemesis(id) || zp_get_user_survivor(id))
return PLUGIN_CONTINUE
if(jumpdoz[id][1] == 1) {
new Float:velocity[3]
entity_get_vector(id,EV_VEC_velocity,velocity)
velocity[2] = random_float(265.0,285.0)
entity_set_vector(id,EV_VEC_velocity,velocity)
jumpdoz[id][1] = 0
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public Ev_CurWeapon( id ) {
if(zp_get_user_zombie(id) || !is_user_alive(id)) return
if(get_user_weapon(id) == CSW_KNIFE)
replace_models(id)
}
replace_models(id) {
if(zp_get_user_zombie(id) || !is_user_alive(id)) return
set_pev( id, pev_viewmodel2, human_clase[g_class_pre[id]][v_model])
set_pev( id, pev_weaponmodel2, human_clase[g_class_pre[id]][p_model])
}
public Fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type, iDmgBits) {
if(zp_get_user_zombie(attacker) && is_user_alive(attacker)) {
if(get_user_weapon(attacker) == CSW_KNIFE && g_pushed_class[attacker] == BERSERKER)
SetHamParamFloat(4, damage *= 3.0 )
if(get_pdata_int(victim, 75) == HIT_HEAD && g_pushed_class[attacker] == PRECISO)
SetHamParamFloat(4, damage * 2.0)
}
}
public menu_hclasses(id) {
new class_menu = menu_create("\wElegir clase de \r Humano:^n^n", "menu_handler")
new num[3], len[1024]
for (new i = 0; i < sizeof human_clase ; i++) {
num_to_str(i, num, 2)
if(g_class_pre[id] != i) {
if(zp_get_user_level(id) >= human_clase[i][class_level] && zp_get_user_reset(id) >= human_clase[i][class_Reset])
formatex(len, sizeof len - 1, "\w %s \y [%s] \w- \r[Disponible]" , human_clase[i][class_name] , human_clase[i][class_ability])
else
formatex(len, sizeof len - 1, "\d %s \w - \r[Nivel: %d] r: %d" , human_clase[i][class_name] , human_clase[i][class_level], human_clase[i][class_Reset])
}
else
formatex(len, sizeof len - 1, "\d %s [%s] - [Elegido]" , human_clase[i][class_name] , human_clase[i][class_ability])
menu_additem(class_menu, len, num)
}
menu_setprop(class_menu, MPROP_BACKNAME, "\yAtras")
menu_setprop(class_menu, MPROP_NEXTNAME, "\ySiguiente")
menu_setprop(class_menu, MPROP_EXITNAME, "\ySalir")
menu_display(id, class_menu, 0)
}
public menu_handler(id, class_menu, item) {
if(item == MENU_EXIT) {
menu_destroy(class_menu)
return PLUGIN_HANDLED
}
if (!g_conectado[id]) return PLUGIN_HANDLED;
new data[6], iName[64]
new access, callback
menu_item_getinfo(class_menu, item, access, data,5, iName, 63, callback)
if(zp_get_user_level(id) < human_clase[item][class_level] && zp_get_user_reset(id) < human_clase[item][class_Reset]) {
colored_print(id, "^x04%s^x01 Para elegir esta^x04 Clase Humana^x01 necesitas ser^x04 Nivel^x01 :^x04 %d^x01 Reset^x01 :^x04 %d^x01.", T4G, human_clase[item][class_level], human_clase[item][class_Reset] )
menu_hclasses(id)
return PLUGIN_HANDLED;
}
if(g_class_pre[item] && get_user_weapon(id) == CSW_KNIFE) {
replace_models(item)
}
g_class_pre[id] = item
colored_print(id, "^x04%s^x01 En Tu Proximo Spawn, Tu Clase Sera^x03 %s", T4G, human_clase[item][class_name])
return PLUGIN_HANDLED
}
public radar_scan() {
new zombie_count = 0;
new zombie_list[32];
new ZombieCoords[3];
new id, i;
for (new id=1; id<=g_MaxPlayers; id++) {
if ((zp_get_user_zombie(id))&&(is_user_alive(id))) {
zombie_count++;
zombie_list[zombie_count]=id;
}
}
for (id=1; id<=g_MaxPlayers; id++) {
if (!is_user_alive(id)) continue;
if (g_pushed_class[id] != RADAR || zp_get_user_zombie(id)) continue;
for (i=1;i<=zombie_count;i++) {
get_user_origin(zombie_list[i], ZombieCoords)
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id)
write_byte(id)
write_byte(i)
write_coord(ZombieCoords[0])
write_coord(ZombieCoords[1])
write_coord(ZombieCoords[2])
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id)
write_byte(i)
message_end()
}
}
}
stock colored_print(id, const mensaje[], any:...) /* Stock de r0ma */ {
if(!g_conectado[id])
return
static buffer[192]
vformat(buffer, charsmax(buffer), mensaje, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, id)
write_byte(id)
write_string(buffer)
message_end()
}