Basado en el Mod "The Hidden".
Son 4 plugins en cuestion pero por ahora pondre solo el principal
TheHidden.amxx (Principal)
TheHiddenHook.amxx (como el gancho de Batman)
grab_plus.amxx (como la fuerza de StarWars)
laser_aiming.amxx (mira laser que se torna verde cuando apuntas al invisible)
Otorga Invisibilidad y poderes al comprador.
(los poderes son los otros 2 plugins que no son de mi autoria pero los modifique para completar el principal)
("h_cost","5000") //5000$ coste para adquirir el Hidden
("h_buyable","1") // activar/desactivar comprar
("h_sounds","1") // activar/desactivar sonidos (reproduce sonidos del hidden aleatoriamente mientras la ronda este en curso)
("h_rules","1") // activar/desactivar reglas (Para ser Invisible tu Equipo debe ir perdiendo por 3 rondas o mas...)
Pues nada a comprobar y si me dan el visto bueno actualizare el tema con el siguiente plugin. Gracias!
Son 4 plugins en cuestion pero por ahora pondre solo el principal
TheHidden.amxx (Principal)
TheHiddenHook.amxx (como el gancho de Batman)
grab_plus.amxx (como la fuerza de StarWars)
laser_aiming.amxx (mira laser que se torna verde cuando apuntas al invisible)
Otorga Invisibilidad y poderes al comprador.
(los poderes son los otros 2 plugins que no son de mi autoria pero los modifique para completar el principal)
("h_cost","5000") //5000$ coste para adquirir el Hidden
("h_buyable","1") // activar/desactivar comprar
("h_sounds","1") // activar/desactivar sonidos (reproduce sonidos del hidden aleatoriamente mientras la ronda este en curso)
("h_rules","1") // activar/desactivar reglas (Para ser Invisible tu Equipo debe ir perdiendo por 3 rondas o mas...)
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <fun>
#include <colorchat>
enum ROUNDSTATUS {
RS_END,
RS_RUNNING,
RS_UNDEFINED
}
new ROUNDSTATUS:roundstatus = RS_UNDEFINED
#define HIDDEN_PAIN 8
new pain_hidden[HIDDEN_PAIN][] = {
"hidden/617-303pain01.wav",
"hidden/617-303pain02.wav",
"hidden/617-303pain03.wav",
"hidden/617-303pain04.wav",
"hidden/617-303pain05.wav",
"hidden/617-303pain06.wav",
"hidden/617-303pain07.wav",
"hidden/617-303pain08.wav"
}
#define HIDDEN_IDLE 5
new idle_hidden[HIDDEN_IDLE][] = {
"hidden/617-behindyou01.wav",
"hidden/617-imhere01.wav",
"hidden/617-iseeyou01.wav",
"hidden/617-lookup01.wav",
"hidden/617-overhere01.wav"
}
#define HIDDEN_MISS 3
new miss_hidden[HIDDEN_MISS][] = {
"hidden/617-pigstick01.wav",
"hidden/617-pigstick02.wav",
"hidden/617-pigstick03.wav"
}
#define HIDDEN_HIT 3
new hit_hidden[HIDDEN_HIT][] = {
"hidden/claw_strike1.wav",
"hidden/claw_strike2.wav",
"hidden/claw_strike3.wav"
}
#define HIDDEN_DEATH 4
new death_hidden[HIDDEN_DEATH][] = {
"hidden/617-death01.wav",
"hidden/617-death02.wav",
"hidden/617-death03.wav",
"hidden/617-death04.wav"
}
#define HIDDEN_RADIO 2
new radio_hidden[HIDDEN_RADIO][] = {
"hidden/617-radiotaunts01.wav",
"hidden/617-radiotaunts04.wav"
}
//Color de la Nightvision Hidden
#define nR 0
#define nG 200
#define nB 200
new nightvision[33]
new bool:hidden[33]
new h_cost, h_buyable, h_sounds, h_rules
new Twins, CTwins
#define MAX_PLAYERS 32
new bool:g_restart_attempt[MAX_PLAYERS + 1]
new bool:map_off = false
new mapname[32]
//para usar con zombieme.amxx
new bool:zombie[33]
new bool:xvar_task
new xvar_zombie_has, xvar_zombie_id, get_id
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
////COMMANDS
register_concmd("buy_hidden","buy_hidden")
register_clcmd("nightvision","client_nightvision")
register_menuid("hidden_menu")
register_concmd("hidden_menu","hidden_menu", ADMIN_BAN)//para abrir menu desde la consola
register_concmd("hmenu","hidden_menu", ADMIN_BAN)
register_concmd("+hidden","radio_off")//bindear teclas de radio Z X C
register_clcmd( "+grab", "grab")
register_clcmd( "-grab", "invisibility")
/////////EVENTS/////
register_event("WeapPickup", "event_weap_pickup", "be", "1!29") // removes players picked up weapon
register_event("Damage","event_damage_pain","be","2!0","3=0") // cuando produce algun daño al jugador
register_event("DeathMsg","event_DeathMsg","a") // cuando muere de algun jugador
register_event("CurWeapon","event_CurWeapon","be") // use the CurWeapon event to keep setting player's speed
//register_event("CurWeapon","event_CurWeapon","be", "1=1", "2=29") // use the CurWeapon event to keep setting player's speed
register_event("ResetHUD", "event_hud_reset", "be") // cuando se reinicia el HUD PLAYER
//register_event("HLTV", "check_commands", "a")
register_clcmd("fullupdate", "clcmd_fullupdate") //
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_will_restart_in")// cuendo el CS usa algun comando
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_Commencing")// cuendo el CS usa algun comando
register_event("TeamScore", "T_score", "a", "1=TERRORIST")//Cuando los T ganan una ronda
register_event("TeamScore", "CT_score", "a", "1=CT")
register_forward(FM_PlayerPreThink,"Client_PreThink")
register_forward(FM_Touch,"fw_Touch") // Cuando el jugador o entidad toca algo
register_forward(FM_EmitSound, "fw_EmitSound")
register_logevent("event_roundstart", 2, "0=World triggered", "1=Round_Start") // detecta el empieze de la ronda
register_event("SendAudio", "event_twin", "a", "2&%!MRAD_terwin") // detecta cuando ganan T
register_event("SendAudio", "event_ctwin", "a", "2&%!MRAD_ctwin") // detecta cuadno ganan CT
register_logevent("event_roundend",2,"1=Game_Commencing") // detecta el final de la ronda
/////////////////////
/////////CVARS/////////
h_cost = register_cvar("h_cost","5000") //5000 coste
h_buyable = register_cvar("h_buyable","1") // activar/desactivar comprar
h_sounds = register_cvar("h_sounds","1") // activar/desactivar sonidos
h_rules = register_cvar("h_rules","1") // activar/desactivar reglas
///////////////////
///////////////STUFF////////////
register_cvar(PLUGIN,VERSION,FCVAR_SERVER)
if(!xvar_exists("zombie_has"))// si la xvar NO existe
{
log_amx("XVar zombie_has, no existe en zombieme.amxx")
xvar_task = false
}
else{//si la xvar SI existe
xvar_task = true
}
}
public bool:hidden_has = false //para usar en otros plugins
public hidden_id = 0 //para usar en otros plugins
//para usar en otros plugins
public plugin_precache() {
precache_model("models/player/hidden/hidden.mdl") // model player
precache_model("models/player/hidden/v_knife_hidden.mdl") // knife model
precache_sound("hidden/617-aurain01.wav")
precache_sound("hidden/617-auraout01.wav")
new i
for (i = 0; i < HIDDEN_PAIN; i++)
precache_sound(pain_hidden[i])
for (i = 0; i < HIDDEN_IDLE; i++)
precache_sound(idle_hidden[i])
for (i = 0; i < HIDDEN_MISS; i++)
precache_sound(miss_hidden[i])
for (i = 0; i < HIDDEN_HIT; i++)
precache_sound(hit_hidden[i])
for (i = 0; i < HIDDEN_DEATH; i++)
precache_sound(death_hidden[i])
for (i = 0; i < HIDDEN_RADIO; i++)
precache_sound(radio_hidden[i])
}
public client_connect(id) {// resetea todas las variables
set_task(0.1, "xvar_load", id, _, _, "b")
hidden[id] = false
hidden_has = false
hidden_id = id
nightvision[id] = false
}
public client_disconnect(id) {// resetea todas las variables
Remove_hidden(id)
}
public xvar_load(id){
if(xvar_task == true){
xvar_zombie_has = get_xvar_id ("zombie_has")
xvar_zombie_id = get_xvar_id ("zombie_id")
get_id = get_xvar_num(xvar_zombie_id)
zombie[get_id] = bool:get_xvar_num(xvar_zombie_has)
}
}
public nombre_mapa(){
get_mapname(mapname, sizeof (mapname))
if( (equali(mapname, "as_", 3)) || (equali(mapname, "es_", 3)) ){
map_off = true
}
}
public buy_hidden(id) {
if (get_pcvar_num(h_buyable) != 1){
client_print(id,print_chat,"[HIDDEN] La Invisibilidad no esta disponible.")
return PLUGIN_HANDLED
}
if(!is_user_alive(id)){
client_print(id,print_chat,"[HIDDEN] Intentalo cuando estes vivo.")
return PLUGIN_HANDLED
}
if(hidden[id]){
client_print(id, print_chat, "[HIDDEN] Ya eres Invisible.")
return PLUGIN_HANDLED
}
if(zombie[id]){
client_print(id, print_chat, "[HIDDEN] Eres Zombi, no puedes volverte Invisible!")
return PLUGIN_HANDLED
}
nombre_mapa()
if(map_off){
client_print(id,print_chat,"[HIDDEN] En este mapa no se perminte la Invisibilidad.")
return PLUGIN_HANDLED
}
if( cs_get_user_buyzone(id) == 0 ){// si NO esta en la zona de compra
client_print(id, print_chat, "[HIDDEN] Debes estar en la zona de compra!" )
return PLUGIN_HANDLED
}
if((cs_get_user_money(id) - get_pcvar_num(h_cost)) < 0){// check if the player has enough cash
client_print(id,print_chat,"[HIDDEN] Para volverte Invisible necesitas $%d", get_cvar_num("z_cost"))
return PLUGIN_HANDLED
}
if(!check_team_lose(id) && get_pcvar_num(h_rules) == 1){
client_print(id, print_chat, "[HIDDEN] Para ser Invisible tu Equipo debe ir perdiendo por 3 rondas o mas...")
return PLUGIN_HANDLED
}
if(checking_hidden() == true){//si algun jugador es el hidden
client_print(id,print_chat,"[HIDDEN] Solo puede existir un Invisible.")
return PLUGIN_HANDLED
}
hidden[id] = true
hidden_has = true
hidden_id = id
event_player_spawn(id)
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(h_cost))
return PLUGIN_CONTINUE
}
public clcmd_fullupdate(){
return PLUGIN_HANDLED_MAIN
}
public event_roundstart(id){
roundstatus = RS_RUNNING
}
public event_twin(){
set_task(1.0, "event_roundend")
}
public event_ctwin(){
set_task(1.0, "event_roundend")
}
public event_roundend(){//si la ronda termino reiniciar el model del hidden para evitar errores al volver a cargarlo
roundstatus = RS_END
new players[32], count
get_players(players, count, "h")
for(new i = 0; i < count; i++)
{
if(hidden[players[i]])
cs_reset_user_model(players[i])
}
return PLUGIN_HANDLED
}
public event_restart_attempt() {//para verificar si se ha reiniciado la ronda
Twins = 0
CTwins = 0
new players[32], num
get_players(players, num, "a")
for (new i; i < num; ++i){
g_restart_attempt[players[i]] = true
}
}
public event_hud_reset(id) {//al empezar la ronda
if (g_restart_attempt[id]) {// si la ronda se a reiniciado
g_restart_attempt[id] = false
Remove_hidden(id)
}
event_roundstart(id)
event_player_spawn(id)
}
public bool:checking_hidden(){
new players[32], num
get_players(players, num, "a")
for (new i; i < num; ++i){
if(hidden[players[i]] == true){
return true
}
}
return false
}
public bool:Aiming_hiddens(id){//chequea si el id esta mirando a un hidden
new idAiming , iBodyPart
get_user_aiming( id , idAiming , iBodyPart )
if( is_user_alive(idAiming) && hidden[idAiming] ){
return true
}
return false
}
public BotDontShoot(id){//event_CurWeapon para que los robots suelten las armas
if(Aiming_hiddens(id)){
if(is_user_bot(id) && is_user_connected(id) && is_user_alive(id)){ //si es un bot
engclient_cmd(id, "drop")
}
}
}
/*
public check_wins(id){
if(!check_team_lose(id)){//si el equipo del jugador no va perdiendo
clear_hidden(id)
}
}
*/
public T_score(){
Twins = read_data(2)
}
public CT_score(){
CTwins = read_data(2)
}
public bool:check_team_lose(id){//Para saber si el equipo del jugador va perdiendo
new CsTeams:iTeam = cs_get_user_team(id)
if((iTeam == CS_TEAM_T) && (Twins < CTwins)){//el jug es T y van perdiendo
if(CTwins - Twins >= 3){//perdiendo por 3 rondas o mas
return true
}
}
if((iTeam == CS_TEAM_CT) && (Twins > CTwins)){//el jug es CT y van perdiendo
if(Twins - CTwins >= 3){
return true
}
}
return false
}
public clear_hidden(id){
if(!hidden[id]){
return
}
Remove_hidden(id)
emit_sound(id, CHAN_VOICE, "hidden/617-auraout01.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
client_print(id, print_chat, "[HIDDEN] Las vitaminas para la Invisibilidad dejaron de tener efecto!")
if(get_user_health(id) != 100){//restablece la vida
set_user_health(id, 100)
}
if(get_user_armor(id) != 100){//restablece la armadura
set_user_armor(id, 100)
}
event_player_spawn(id)//quita el model del jugador y lo vuelve visible
engclient_cmd(id, "drop")//suelta el arma actual
give_item(id,"weapon_p228")//restablece el model del arma mostrada
give_item( id , "ammo_357sig" )//da balas para la pistola p228
cs_set_user_nvg(id,0)//quita la vision nocturna
//set_user_rendering(id)//quita el glow del jugador
set_vision(id)//restablece el color de la vision del jugador
}
//########################################################################################################################//
public event_player_spawn(id) {//cuando se compra el zombie o se empieza la ronda siendo zombie
if(hidden[id] && is_user_alive(id)){
set_task(0.1, "RemovePickedWeapon", id) //removes zombies guns
//Hidden transform
emit_sound(id, CHAN_VOICE, "hidden/617-aurain01.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
//////////////
ChatColor(id, BLUE, "[HIDDEN] Te has vuelto Invisible!")
if (roundstatus == RS_RUNNING){
cs_set_user_model(id, "hidden")
}
if(!nightvision[id]){
cs_set_user_nvg(id,0)
client_cmd(id, "nightvision")
}
//if(!task_exists(id))
set_task(1.0, "life_increase", id, _, _, "b")
set_task(1.0,"hiddensounds", id, _, _, "b")
set_vision(id)
//SI PONGO ESTO DE ERROR EN EL LOG give_item(id, "item_kevlar")
set_user_armor(id, 100)
//client_cmd(id, "+hook_on")//activar el hook en TheHiddenHook.amxx
fm_set_entity_visibility(id, 0)// 0=invisible 1=visible
}
else{
if (zombie[id] == false && is_user_alive(id)){//Si no es zombi
cs_reset_user_model(id)
}
fm_set_entity_visibility(id, 1)
}
}
public life_increase(id){
if(!is_user_alive(id) || !hidden[id]){
return PLUGIN_HANDLED
}
if(get_user_health(id) >= 100){//max
return PLUGIN_HANDLED
}
if(get_user_health(id) +1 > 100){//max
set_user_health(id, 100)
return PLUGIN_HANDLED
}
set_user_health(id, get_user_health(id)+1)
return PLUGIN_CONTINUE
}
public event_DeathMsg() { //despues de morir
//new killer = read_data(1)
//new victim = read_data(2)
new id
id = read_data(2)
if(hidden[id]){
set_task(1.0,"Remove_hidden",id)//el que muere(victima) se le resetean las variables
}
return PLUGIN_CONTINUE
}
public Remove_hidden(id){// declara que ya no es zombi
hidden[id] = false
hidden_has = false
hidden_id = id
nightvision[id] = false
set_vision(id)
fm_set_entity_visibility(id, 1)// 0=invisible 1=visible
}
public set_vision(id) {//pone el model
if (!zombie[id] && !hidden[id]){//si no es zombie ni el hidden reestablece la vision del jugador
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(~0)
write_short(~0)
write_short(0)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(80)
message_end()
client_cmd(id, "amx_restrict off shield")//Habilita el item
client_cmd(id, "amx_restrict off nvgs")
return
}
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/player/hidden/v_knife_hidden.mdl"))
set_pev(id, pev_weaponmodel, engfunc(EngFunc_AllocString, ""))
client_cmd(id, "amx_restrict on shield")//Deshabilita el item
client_cmd(id, "amx_restrict on nvgs")
}
public event_weap_pickup(id) {//cuando recoje un arma
if(hidden[id]){
set_task(0.1, "RemovePickedWeapon", id)
}
return PLUGIN_HANDLED
}
public RemovePickedWeapon(id) {//para soltar todas las armas
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_CONTINUE
if(hidden[id]){
engclient_cmd(id, "drop", "weapon_c4")
set_vision(id)
strip_user_weapons(id)
give_item(id,"weapon_knife")
}
return PLUGIN_HANDLED
}
public fw_Touch(pToucher, pTouched)
{
if ( !pev_valid(pToucher) || !pev_valid(pTouched) )
return FMRES_IGNORED
if (!is_user_connected(pTouched) )
return FMRES_IGNORED
if (!hidden[pTouched] )
return FMRES_IGNORED
new className[32]
pev(pToucher, pev_classname, className, 31)
if ( equal(className, "weaponbox") || equal(className, "armoury_entity" ) || equal(className, "weapon_shield" ) )
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public event_CurWeapon(id) { // declara la velocidad continuamente al cojer/dejar/cambiar de arma
if(is_user_alive(id) && hidden[id]){
set_vision(id)
}
set_task(0.1, "BotDontShoot", id, _, _, "b")
}
public event_damage_pain(victim) {//daño recibido
//new damage = read_data(2)
//new bodypart, weapon
//new killer = get_user_attacker(victim, weapon, bodypart)
if (hidden[victim] && is_user_alive(victim)){//si el que recibe daño es el hidden
emit_sound(victim, CHAN_VOICE, pain_hidden[random_num(0, HIDDEN_PAIN -1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
//fm_set_entity_visibility(victim, 1)// 0=invisible 1=visible
grab(victim)
set_task(0.01, "invisibility", victim)
}
}
public invisibility(id){
if(is_user_alive(id) && hidden[id]){
fm_set_entity_visibility(id, 0)
}
}
public grab(id){
if(is_user_alive(id) && hidden[id]){
fm_set_entity_visibility(id, 1)// 0=invisible 1=visible
}
}
stock fm_set_entity_visibility(index, visible = 1){ //from fakemeta_util PARA ON/OFF INVISIBILIDAD
set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)
//new kRndMode = visible == 1 ? ( _:kRenderNormal ) : ( _:kRenderTransAlpha )
//set_user_rendering(index, kRenderFxNone, 0, 0, 0, kRndMode, 0)
return 1
}
public hiddensounds(id){//reproduce sonidos del hidden aleatoriamente mientras la ronda este en curso
if (roundstatus == RS_RUNNING && get_pcvar_num(h_sounds))
{
if (random_num(1, 35) == 5 && hidden[id] && is_user_alive(id)) {
if(is_user_alive(id))
emit_sound(id, CHAN_VOICE, idle_hidden[random_num(0, HIDDEN_IDLE -1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
}
public Client_PreThink(id){//para poner la vision nocturna
if(hidden[id] && is_user_alive(id) && nightvision[id]) {
new pos[3]
get_user_origin(id, pos)
message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id)
write_byte(TE_DLIGHT)
write_coord(pos[0])
write_coord(pos[1])
write_coord(pos[2])
write_byte(80)
write_byte(nR)
write_byte(nG)
write_byte(nB)
write_byte(5)
write_byte(10)
message_end()
}
return PLUGIN_CONTINUE
}
public client_nightvision(id){//para saber si se esta usando la vision nocturna (si se ha pulsado la N)
if(nightvision[id])
{
nightvision[id] = false
return PLUGIN_HANDLED
}
if(!nightvision[id])
{
nightvision[id] = true
}
return PLUGIN_CONTINUE
}
public fw_EmitSound(id, channel, sample[]){//para emitir sonidos segun las teclas pulsadas
if(sample[0] == 'p' && sample[1] == 'l'&& sample[7] == 'd' && hidden[id])
{
emit_sound(id, CHAN_WEAPON, death_hidden[random_num(0, HIDDEN_DEATH -1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
if ( !is_user_alive(id) || !hidden[id] )
return FMRES_IGNORED
if ( sample[0] == 'w' && sample[1] == 'e' && sample[8] == 'k' && sample[9] == 'n' )
{
switch(sample[17])
{
case 'l': return FMRES_SUPERCEDE
case 's', 'w':
{
emit_sound(id, CHAN_WEAPON, miss_hidden[random_num(0, HIDDEN_MISS -1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
case 'b', '1', '2', '3', '4':
{
emit_sound(id, CHAN_WEAPON, hit_hidden[random_num(0, HIDDEN_HIT -1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
}
}
return FMRES_IGNORED
}
public radio_off(id){
if(is_user_alive(id) && hidden[id]){
emit_sound(id, CHAN_VOICE, radio_hidden[random_num(0, HIDDEN_RADIO -1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
//########################################################################################################################//
public hidden_menu(id){
if (!(get_user_flags(id)&ADMIN_KICK)){
server_print("El Menu Hidden es solo para admins...")
client_print(id,print_chat,"El Menu Hidden es solo para admins...")
return
}
/*
Colores:
\w = Blanco
\r = Rojo
\d = Gris
\y = Amarillo
^t = tabulacion (espacio)
^n = salto de linea
\R = align text to the right
\a => Beep
\b => Backspace
\e => Escape
\n => Nueva Línea
\r => Retorno de Carro (se utiliza en Windows para una línea nueva "/r/n")
\t => Tabulación Horizontal
\v => Tabulación Vertical
\\ => Inserta literalmente el símbolo '\'
\’’ => Inserta literalmente el símbolo "'"
\" => Inserta literalmente el símbolo '"'
\% => Inserta literalmente el símbolo '%'
\ddd => código de caracteres, con el código en decimal "ddd"
\xhhh => código de caracteres, con el código en hexadecimal "hhh"
*/
new players[32], num;
new szName[32], szUserId[32];
get_players(players, num);
new menu = menu_create("\yTransformar en Hidden a :", "hidden_trasform")
for(new i = 0 ; i < num ; i++){//busca a todos los jugadores
if (is_user_connected(players[i]) && is_user_alive(players[i])){
get_user_name( players[i], szName, charsmax( szName ) );
formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid(players[i]) );
menu_additem( menu, szName, szUserId, 0 );
}
}
menu_setprop(menu, MPROP_EXITNAME, "\ySalir")
menu_setprop(menu, MPROP_NEXTNAME, "\yMas")
menu_setprop(menu, MPROP_BACKNAME, "\yAtras")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
}
public hidden_trasform(id, menu, item){
if(item == MENU_EXIT){
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback);
new iKey = str_to_num(data); //guarda el id del jugador elegido
new player_id = find_player( "k", iKey ); // flag "k" : para buscar al jugador por id
if(checking_hidden() == true){//si algun jugador es el hidden
client_print(id,print_chat,"[HIDDEN] Solo puede existir un Invisible.")
return PLUGIN_HANDLED
}
if (!is_user_connected(player_id) || !is_user_alive(player_id)){
client_print(id, print_chat, "[HIDDEN] El usuario %s esta Muerto o no esta Conectado.", iName)
return PLUGIN_HANDLED
}
if ( player_id && is_user_alive(player_id) ){//si el jugador esta vivo
if(hidden[player_id] == true){
clear_hidden(id)
client_print(id,print_chat,"[HIDDEN] Invisibilidad OFF para %s", iName)
new Admin_Name[32]
get_user_name( id, Admin_Name, charsmax( Admin_Name ) );
client_print(player_id,print_chat,"[HIDDEN] El Admin %s te volvio Visible.", Admin_Name)
}
else{//si el jugador no es hidden
hidden[player_id] = true
hidden_has = true
hidden_id = player_id
event_player_spawn(player_id)
client_print(id,print_chat,"[HIDDEN] Invisibilidad ON para %s", iName)
new Admin_Name[32]
get_user_name( id, Admin_Name, charsmax( Admin_Name ) );
client_print(player_id, print_chat, "[HIDDEN] El Admin %s te volvio Invisible.", Admin_Name)
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}