Senior Member
|

04-13-2013
, 21:52
[APORTE] Clases Humanas Con/Sin Niveles
|
#1
|
Hola, buenas
-Primero que nada tengo 2 acotaciones.
Todos los que mas saben, diran que esto es un asco que se puede mejorar etc, etc pero con el tiempo lo optimizare y le agregare nuevas cosas, porfavor este es mi primer aporte, solo les pido criticas constructivas y/o Ideas para mejorarlos
-Lo segundo para los que son nuevos y no saben mucho les deje todo bien explicadito, si tienen alguna duda solo dejen un comentario, o mandenme un PM.
-Bueno... ¿Que es esto?
* Es un sistema con 10 clases de humanos con habilidades las cuales se mostraran escribiendo /clase
* Un model de cuchillo deferente para cada Clase.
* Ideal para Mod Zombie Plague.
Con Restriccion de Niveles (Native)
PHP Code:
/*Antes que nada decirles que esto lo hise pensando en las personas que recien comienzan, porfavor los mas experimentados abstenganse de hacer malos comentarios. y claro toda critica constructiva, consejo, optimizacion etc. solo diganla y con gusto las atendere
que es esto ?
Bueno este es un sistema con 10 clases de humanos para zombie plague especificadas mas abajo en la const human_clase. tome codigos de varios plugins y arme esto, espero les guste y porfavor les repito abstenganse de todo comentario negativo
*** version 1.0 ***
- Posteo de Plugin. - 10 Clases Diferentes. - Restriccion de Niveles *Natives* *** ----------- ***
*** version 1.5 ***
- Agregado 1 Cuchillo para cada Humano. - Pequenias Optimizaciones. *** ----------- ***
*** version 2.0 ***
- 5 constantes para los datos y los levels de las clases, reducido a 1 cons + 1 enum - Limpieza de Brazaletes Que estaban demas. - Optimizado funcion ham takedamage - 2 variables resumidas a 1 de 2 celdas - chequeo is_user_alive en playerperthink *** ----------- ***
Cabe detacar que esta version la hize con retriccion con native es un ejemplo del que uso yo, si tienen problemas guiense con la native zp_get_user_ammopacks / zp_set_user_ammopacks para crear la del lvl, la registran en el include zombieplague o crean el suyo propio, por si las dudas les dejo el zombieplague.inc ya modificado con la native del lvl, ya solo les quedaria registrarlo en su zp.
en su zp se van a.
public plugin_natives().
y agregan
register_native("zp_get_user_level", "native_get_user_level", 1) register_native("zp_set_user_level", "native_set_user_level", 1)
luego se van a cualquier parte del zp al final o donde sea, siempre y cuando sea fuera de otro public y agregan.
// Native: zp_get_user_level public native_get_user_level(id) { return VARIABLE_DE_NIVEL[id]; } // Native: zp_set_user_ammo_packs public native_set_user_level(id, amount) { VARIABLE_DE_NIVEL[id] = amount; }
y eso seria todo, cualquier duda respecto a esto posteenlo o mandenme un PM y con guto les ayudare
Ojala sea de su agrado gracias.
sl2.
*/
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #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] }
new const human_clase[][human_class] = { {"Humano Clasico", "Ninguna Abilidad", 0, "models/v_knife.mdl", "models/p_knife.mdl"}, {"Humano Berseker", "x3 Damage Cuchillos", 5, "models/v_berserker_knife.mdl", "models/p_berserker_knife.mdl"}, {"Humano Atleta", "+Rapido", 10, "models/v_atleta_knife.mdl", "models/p_atleta_knife.mdl"}, {"Humano Astronauta", "+Gravedad", 15, "models/v_astronauta_knife.mdl", "models/p_astronauta_knife.mdl"}, {"Humano MultiJump", "Triple Salto", 20, "models/v_multijump_knife.mdl", "models/p_multijump_knife.mdl"}, {"Humano Preciso", "Semi-Recoil", 25, "models/v_preciso_knife.mdl", "models/p_preciso_knife.mdl"}, {"Humano Iluminado", "Aura Luminoza", 30, "models/v_iluminado_knife.mdl", "models/p_iluminado_knife.mdl"}, {"Humano Rastreador", "Zombie en Radar", 35, "models/v_rastreador_knife.mdl", "models/p_rastreador_knife.mdl"}, {"Humano Ninja", "Silencioso +Gravedad", 40, "models/v_ninja_knife.mdl", "models/p_ninja_knife.mdl"}, {"Humano Tirador", "x2 Damage HeadShot", 45, "models/v_tirador_knife.mdl", "models/p_tirador_knife.mdl"} }
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_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]) 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]" , human_clase[i][class_name] , human_clase[i][class_level]) } 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]) { colored_print(id, "^x04%s^x01 Para elegir esta^x04 Clase Humana^x01 necesitas ser^x04 Nivel^x01 :^x04 %d^x01.", T4G, human_clase[item][class_level]) 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() }
Sin Restriccion de Niveles
PHP Code:
/*Antes que nada decirles que esto lo hise pensando en las personas que recien comienzan, porfavor los mas experimentados abstenganse de hacer malos comentarios. y claro toda critica constructiva, consejo, optimizacion etc. solo diganla y con gusto las atendere
que es esto ?
Bueno este es un sistema con 10 clases de humanos para zombie plague especificadas masa abajo en la const human_clase. tome codigos de varios plugins y arme esto, espero les guste y porfavor les repito abstenganse de todo comentario negativo
*** version 1.0 ***
- Posteo de Plugin. - 10 Clases Diferentes.
*** ----------- ***
*** version 1.5 ***
- Agregado 1 Cuchillo para cada Humano. - Pequenias Optimizaciones. *** ----------- ***
*** version 2.0 ***
- 4 constantes para los datos de las clases, reducido a 1 cons + 1 enum - Limpieza de Brazaletes Que estaban demas. - Optimizado funcion ham takedamage - 2 variables resumidas a 1 de 2 celdas - chequeo is_user_alive en playerperthink *** ----------- ***
Cabe detacar que esta version no tiene retriccion de niveles por lo que al escribir /clase podran elegir su clase libremente.
Ojala sea de su agrado gracias.
sl2.
*/
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #include <engine> #include <fun> #include <xs>
#define PLUGIN "Clases Humanas S/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], v_model[90], p_model[90] }
new const human_clase[][human_class] = { {"Humano Clasico", "Ninguna Abilidad", "models/v_knife.mdl", "models/p_knife.mdl"}, {"Humano Berseker", "x3 Damage Cuchillos", "models/v_berserker_knife.mdl", "models/p_berserker_knife.mdl"}, {"Humano Atleta", "+Rapido", "models/v_atleta_knife.mdl", "models/p_atleta_knife.mdl"}, {"Humano Astronauta", "+Gravedad", "models/v_astronauta_knife.mdl", "models/p_astronauta_knife.mdl"}, {"Humano MultiJump", "Triple Salto", "models/v_multijump_knife.mdl", "models/p_multijump_knife.mdl"}, {"Humano Preciso", "Semi-Recoil", "models/v_preciso_knife.mdl", "models/p_preciso_knife.mdl"}, {"Humano Iluminado", "Aura Luminoza", "models/v_iluminado_knife.mdl", "models/p_iluminado_knife.mdl"}, {"Humano Rastreador", "Zombie en Radar", "models/v_rastreador_knife.mdl", "models/p_rastreador_knife.mdl"}, {"Humano Ninja", "Silencioso +Gravedad", "models/v_ninja_knife.mdl", "models/p_ninja_knife.mdl"}, {"Humano Tirador", "x2 Damage HeadShot", "models/v_tirador_knife.mdl", "models/p_tirador_knife.mdl"} }
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_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) formatex(len, sizeof len - 1, "\d %s [%s] \w- \r[Elegido]" , human_clase[i][class_name] , human_clase[i][class_ability]) else formatex(len, sizeof len - 1, "\w %s \y [%s]" , 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( 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() }
-Bueno como les especificaba en el plugin con restriccion les dejo adjunto el zombieplague.inc ya modificado para la restriccion de nivel.
zombieplague.inc
Y tambien les adjunto los models de cuchillo para cada Clase Humana.
model_clases.7z
-Les pido que todos sus comentarios sean constructivos, Para poder mejorar este pequeño esfuerzo.
De ante Mano gracias por su atencion.
PD: Cualquier Duda solo Diganlo
__________________
Last edited by 3MCy Daimont; 04-23-2013 at 22:47.
Reason: Actualizado!
|
|