[TUT][ZP] Crear modos individuales
#1
Buenas a todos

Bueno como lo indiqué en el anterior tutorial sobre modos grupales ahora voy a mostrarles y explicarles sobre los modos individuales, tipo survivor o némesis, etceterita
Bueno, vamos a hacer algo rápido y fácil de hacer, vamos a armar el modo sniper. Vamos a hacer el modo de la siguiente manera y voy a hacer de cuenta que ustedes saben lo básico de pawn.
El modo consiste en un humano (Sniper) con su awp Rainbow
Le seteamos su vida, velocidad, gravedad, etc. Y demás cosas

Vamos a darle :$...

Modo Sniper

1er paso: Creamos las variables, sonidos, models, etc xD
Código PHP:
new const ModelSniper[] = "zp_sniper"/* Supongamosle que tenemos el model del sniper (Model player) llamado zp_sniper
Y si queremos podemos cambiar el model por el que nosoros queramos
Si queremos que tenga mas models, tenemos que cambiar lo siguiente
new const ModelSniper[][] = { "zp_sniper", "zp_sniper2" }; */
new const ModelWeaponSniper[] = "v_sniperawp"/* Bueno esto es OPCIONAL para todos, si quieres que tenga algun model en especifico el arma, agregamos esta linea. 
Si queremos que tenga mas models, vean lo que expliqué arriba */
new const SoundSniper[] = "zombie_plague/zp_sniper"/* Sonido que se reproduce en el momento que se lanza el modo
Si queremos más sonidos, miremos arriba O.o */

/* Vamos al enum donde se encuentra MODE_NONE = 0, y agregamos */
MODE_SNIPER
/* Recuerda que el anterior al que agregaste (MODE_SNIPER), tiene que llevar una coma al final para que pueda compilarse bien */

new g_sniper[33]; // Variable del jugador para identificar si ese es sniper
new g_sniperround// Variable global en donde sabemos si la ronda es sniper

/* Vamos a donde se encuentran todas las cvars y agregamos las siguiente para el modo sniper */
cvar_sniper/* Para que se ejecute el modo */ 
cvar_sniperchance/* Posibilidad para que salga le modo (Tiene relación con la cvar anterior) */ 
cvar_sniperminplayer/* Cantidad de jugadores MINIMA para que se ejecute el modo */ 
cvar_sniperhp/* Vida base del sniper */
cvar_sniperspd/* Velociada base del sniper */
cvar_snipergvt/* Gravedad base del sniper */
cvar_sniperdamage/* Daño del sniper */
cvar_sniperaura/* Aura del sniper (Con esto verificamos si queremos que tenga aura) */
cvar_sniperglow/* Glow del sniper (Con esto verificamos si queremos que tenga glow */
cvar_sniperpainfree/* Verificamos para que el sniper tenga o no Pain shock free */ 
2do paso: Vamos a las funciones plugin_ donde registramos cada comando para el modo.
Código PHP:
/* Esto es OPCIONAL para todos, si quieren no lo agregan, vamos a plugin_native(); y agregamos */
register_native("zp_get_user_sniper""native_get_user_sniper"1); /* Registramos la native para cuando usemos un plugin aparte, 
y queramos saber si el usuario es sniper, esto hace la magia :D */
register_native("zp_get_round_sniper""native_get_round_sniper"1); */
Registramos la nativa cuando es RONDA sniper */
/* Al final del plugin agregamos la función de la native */
public native_get_user_sniper(id)
    return 
g_sniper[id]; // Devuelve el valor del jugador (id) cuando es sniper
public native_get_round_sniper()
    return 
g_sniperround;

/* Vamos a plugin_precache(); y agregamos lo siguiente */
formatex(playermodelcharsmax(playermodel), "models/player/%s/%s.mdl"ModelSniperModelSniper);
if (
file_exists(playermodel)) precache_model(playermodel);

/* Usen este loop para cuando usan mas de un model, tal como lo expliqué con el tema del new const ModelSniper[][] = { "", "" };
for (i = 0; i < sizeof(ModelSniper); i++)
{
    formatex(playermodel, charsmax(playermodel), "models/player/%s/%s.mdl", ModelSniper[i], ModelSniper[i]);
    if (file_exists(playermodel)) precache_model(playermodel[i]);
} */
/* Bueno simplemente aquí precachamos el model del sniper. 
Guardamos en la variable-string "playermodel" (Ya creada en el ZP), 
y lo precachamos y con la condición de que si el archivo existe, entonces lo precachamos */
/* También pueden hacerlo de la manera como está tal cual en el ZP, que sería engfunc (engfunc(EngFunc_PrecacheModel, playermodel[i]); */

formatex(playermodelcharsmax(playermodel), "models/zombie_plague/%s.mdl"ModelWeaponSniper);
if (
file_exists(playermodel)) precache_model(playermodel);

/* Esto tal como dije arriba si usamos mas de un model de algun arma
for (i = 0; i < sizeof(ModelWeaponSniper); i++)
{
    formatex(playermodel, charsmax(playermodel), "models/zombie_plague/%s.mdl", ModelWeaponSniper[i]);
    if (file_exists(playermodel)) precache_model(ModelWeaponSniper[i]); 
} */
/* Precachamos el model del arma del sniper, pueden hacer como expliqué arriba */

if (file_exists(SoundSniper)) precache_sound(SoundSniper);
/* for (i = 0; i < sizeof(SoundSniper); i++)
   if (file_exists(SoundSniper[i])) precache_sound(SoundSniper[i]); */
/* Precachamos el sonido cuando comienza el modo sniper, como expliqué arriba, pueden usar también (EngFunc_PrecacheSound) */

/* Vamos a plugin_init(); y agregamos lo siguiente */
register_concmd("zp_sniper""cmdSniper"ADMIN_BAN"<Target> Sleccionamos al jugador para que sea sniper");
/* Registramos el comando (Por consola) para convertir a un jugador en sniper (Solo los admines cuyo flag es ADMIN_BAN [Flag b]) */

// CVAR - Sniper mode
cvar_sniper register_cvar("zp_sniper_enabled""1");
cvar_sniperchance register_cvar("zp_sniper_chance""45");
cvar_sniperminplayer register_cvar("zp_sniper_min_player""5");
cvar_sniperhp regsiter_cvar("zp_sniper_health""3500");
cvar_sniperspd register_cvar("zp_sniper_speed""300");
cvar_snipergvt register_cvar("zp_sniper_gravity""0.7");
cvar_sniperdamage register_cvar("zp_sniper_damage""25.0");
cvar_sniperaura register_cvar("zp_sniper_aura""1");
cvar_sniperglow register_cvar("zp_sniper_glow""1");
cvar_sniperpainfree register_cvar("zp_sniper_painshock_free""0"); 
3er paso: Seteamos la variable g_sniperround
Código PHP:
/* Vamos a event_round_start(); y agregamos */
g_sniperround false// Cuando comienza una nueva ronda, seteamos la ronda sniper en falsa

/* Vamos a buy_extra_item(id, itemid); y agregamos */
g_sniperround /* Esto lo agregamos en las condiciones donde se "restringe" las variables 
cuando sale algún modo y no se puedan comprar items. Cosa para que quede así */
if (itemid == EXTRA_ANTIDOTE /* código blablabal */ || g_survround || g_sniperround || /* mas código blablabla */
/* Y así con las demas que tengan las variables de las rondas para restringir los items. */

/* Vamos a message_teaminfo(); y hacemos lo mismo que en la anterior agregamos */
g_sniperround // Va en las condiciones donde está
case 'T'// Terrorist
/* Al lado de g_survround, ponemos nuestra variable */

/* Vamos a make_zombie(); y agregamos lo siguienteeeeeeee D: */
else if ((mode == MODE_NONE && (!get_pcvar_num(cvar_preventconsecutive) || g_lastmode != MODE_SNIPER) && random_num(1get_pcvar_num(cvar_sniperchance)) == get_pcvar_num(cvar_sniper) && iPlayersnum >= get_pcvar_num(cvar_sniperminplayer)) || mode == MODE_SNIPER)
/* Esto lo agregamos debajo de la llave donde está el modo survivor */
/* Esta condición indica si el modo es "ninguno", 
es decir, si no hay ningún modo en curso Y la cvar de prevención de modo es 0 
O la variable g_lastmode no es la del modo sniper 
Y elige un numero del 1 al número que contiene la cvar sniperchance y eso es igual al número de la cvar sniper
Y si la variable iPlayersnum es mayor a la cantidad minima guardada en la cvar minplayer O el modo es sniper */
/* Capaz que es poco endendible pero así podemos leer la condición para ejecutar el modo */
{
    
g_sniperround true// Seteamos la variable de la ronda en true
    
g_lastmode MODE_SNIPER// Seteamos la variable el valor del modo sniper

    
if (mode == MODE_NONEid fnGetRandomAlive(random_num(1iPlayersnum)); // Si no hay modo, elegimos un valor en el id del 1 a la cantidad de jugadores vivos para seleccionar un jugador al azar

    
forward_id id// Seteamos el valor del id en la variable estática
    
humanme(id2); // Llamamos a la función humanme para convertir al jugador en sniper (Si usas ZP v4.3 pones humanme(id, 2, 0);

    
for (id 1id <= g_maxplayersid++)
    {
        if (!
is_user_alive(id)) continue; // Si entre la cantidad de jugadores en el servidor, hay un jugador muerto, retorna y continua
        
if (g_sniper[id] || g_zombie[id]) continue; // Si entre la cantidad de jugadores en el servidor, ya hay un sniper y ya hay zombies, retorna y continue
        /* La segunda condición donde está g_zombie[id], es para que cuando los convierte en zombie, y ya hay zombies, no convierta al mismo jugador en zombie, es para evitar bugs sobre los jugadores y que otros jugadores sean humanos por "accidente" */

        
zombieme(id001); // Llamamos la función zombieme para convertir al jugador o jugadores en zombies (Si usas ZP v4.3 usas zombieme(id, 0, 0, 1, 0);
    
}

    
PlaySound(SoundSniper[random_num(0charsmax(SoundSniper))]); // Ejecutamos el sonido cuando sale el modo sniper

    
static iName[32];
    
get_user_name(forward_idiNamecharsmax(iName)); // Guardamos el nombre del jugador convertido en sniper

    
set_hudmessage(20255255HUD_EVENT_XHUD_EVENT_Y10.05.01.01.0, -1); // Seteamos el HUD, en color amarillo cuando sale el modo
    
ShowSyncHudMsg(0g_MsgSync"¡ %s ES SNIPER ! "iName); // Muestra el HUD del jugador convertido
    /* Si usan ZP v4.3, reemplazan iName por g_playername[forward_id] */

    
ExecuteForward(g_fwRoundStartg_fwDummyResultMODE_SNIPERforward_id); // Ejecutamos la forward cuando sea modo sniper. 
}

/* Vamos a respawn_player(); (Si usas v4.3 es respawn_player_task) y agregamos lo siguiente */
!g_sniperround
/* Esto lo agregamos en la condición donde se encuentran las variables de las rondas (Survivor, nemesis, swarm, etc) Para evitar que respawneen los zombies cuando mueren */
/* Cosa que quede así */
if (!is_user_alive(ID_SPAW/* Code blaksjdklnqwe */ && !g_sniperround /* codejiqweoj */ 
4to paso: Seteamos valores de g_sniper, condiciones, etc
Código PHP:
/* Vamos a fw_PlayerKilled(); y hacemos lo siguiente */
// Agregamos
if (g_sniper[victim]) remove_task(id+TASK_AURA); // Removemos le task del aura cuando un sniper muere (El task ya existe en cualquier ZP)

/* Vamos a fw_TakeDamage(); y hacemos */
// Agregamos dentro del if (!g_zombie[id])
if (g_sniper[attacker]) // Si el atacante es sniper
{
    
damage *= get_pcvar_float(cvar_sniperdamage); // Seteamos el daño del sniper con la cvar del mismo
    
SetHamParamFloat(4damage); 
}

/* Ahora vamos a agregar DEBAJO donde el zombie ataca */
if (g_sniper[victim]) return HAM_IGNORED;
/* ¿ Esto para que sirve ?: Es para que al atacar al sniper, reciba daño y no sea infectado (Bugfix) */

/* Vamos a fw_TakeDamage_Post(); y hacemos lo siguiente */
// Agregamos en
if (g_zombie[victim])
{
    
// Codigo aslkdqwe
}
else
{
    if (
g_sniper[victim]) // Cuando es sniper
    
{
        if (!
get_pcvar_num(cvar_sniperpainfree)) return; // Si el valor de la cvar es 0, entonces retorna y sale, sino, se activa el pain shock free
    
}
    else if (
g_survivor[victim])
    {
        
// Cvar del survi del pain free
    
}
}
// Codigo donde se setea el pain shock free

/* Vamos a fw_TouchWeapon(); y agregamos */
if (g_sniper[id]) return HAM_SUPERCEDE// Esto es para que no agarre un arma del piso cuando sea sniper

/* Vamos a fw_CmdStart(); y hacemos lo siguiente */
// En la condición donde se encuentra if (g_zombie[id] || g_survivor... ), agregamos
g_sniper[id]
// Para que quede así
if (... g_survivor[id] || g_sniper[id] ||... )

// Y en la condición de abajo hacemos lo mismo pero ponemos
&& !g_sniper[id]
/* Esto es para que el jugador siendo sniper, no use la linterna */

/* Vamos a fw_PlayerPreThink(); y hacemos lo siguiente */
if (g_sniper[id])
    
set_pev(idpev_maxspeedget_pcvar_float(cvar_sniperspd));
else if (
g_survivor[id])
    
// code kisqweqweputasiajsdoqwe
/* Seteamos la velocidad del sniper y agregamos un else donde se encuentra, si es survivor, deonde ya esta seteada su velocidad propia */

/* Ahora en las funciones menu_buy1(); menu_buy2(); agregamos esto */
if (g_sniper[id]) return PLUGIN_HANDLED// Esto es para que el sniper no pueda comprar un arma cuando abre el menú de compras

/* Vamos a message_cur_weapon(); y agregamos lo siguiente */
// Donde se encuentra && (g_survivor[id] || get_pcvar_num(cvar_infammo) > 1) agregamos
g_sniper[id
// Con tal que quede así
if (MAXBPAMMO[weapon] > && (g_survivor[id] || g_sniper[id] || get_pcvar_num(cvar_infammo) > 1)

/* Vamos a message_ammo_x(); (Si usas v4.3 en Ammo_X o Event_AmmoX), agregamos y hacemos como como arriba */
!g_sniper[id
// Y va a quedar así
if (!g_zombie[msg_entity] && !g_survivor[msg_entity] && !g_sniper[msg_entity])

/* Vamos en message_flashbat(); y agregamos */
if (g_sniper[msg_entity]) return PLUGIN_HANDLED;
// Evitamos los mensajes de la bateria de la linterna

/* Vamos a zombieme(); y al principio de la función agregamos */
g_sniper[id] = false// Evitamos bugs, seteamos la variable del sniper (ID) en falso (0)

/* Vamos a humanme(); [PARTE IMPORTANTISIMA] y hacemos lo siguiente */
// Donde se encuentra if (survivor), lo cambiamos por
else if (survivor == 1)
// Esto sirve para que, si queremos llamar al sniper, usamos humanme(id, 2).. Y al survivor usamos 1, por eso cambiamos las condiciones
// Después arriba del else if agregamos para convertir al player en sniper
if (survivor == 2// Si el parametro survivor es 2, como lo indicamos en el paso 3, cuando seteamos el valor de g_sniperround en la función de male_zombie
{
    
g_sniper[id] = true// Seteamos el valor del jugador en true

    
fm_set_user_health(idget_pcvar_num(cvar_sniperhp)) // Seteamos la vida al sniper
    
if (!g_frozen[id]) set_pev(idpev_gravityget_pcvar_float(cvar_snipergvt)) // Seteamos la gravedad MIENTRAS que no esté congelado el jugador cuando es convertido (Bugfix)

    
fm_strip_user_weapons(id// Les sacamos todas las armas
    
fm_give_item(id"weapon_knife"// Le damos el cuchillo al jugador
    
fm_give_item(id"weapon_awp"// Le damos el awp al sniper O_O

    
turn_off_flashlight(id// Desactivamos la linterna xD
}

// Ejemplo: Tiene que quedar así
if (survivor == 2// Si es sniper
{
    
// Estadisticas base
}
else if (
survivor == 1// Si no, si es survivor
{
    
// Estadisticas base
}
else
{
    
// Si es humano
}
// También pueden reemplazar todos los if, por un switch, asi no se gasta haciendo muchos else if
switch (survivor)
{
    case 
1// Acá si es survivor
    
case 2// Acá si es sniper
    
default: // Acá si es humano. default, significa que si es un numero de parametro que no sea ni 1, ni 2, como lo hicimos arriba
}

/* Vamos a donde se encuenra el model del survivor seteado.. (if (g_survivor[id])).. Lo reemplazan */
else if (g_survivor[id])
// Y arriba agregan
if (g_sniper[id])
{
    for (
0sizeof(ModelSniper); i++)
    {
        if (
equal(ModelSniper[i], currentmodel)) already_has_model true;
    }
    if (!
already_has_model)
    {
        
iRand random_num(0charsmax(ModelSniper))
        
copy(g_playermodel[id], charsmax(g_playermodel[]), ModelSniper[iRand])
    }
}
// Cuando es convertido el sniper, le damos el model correspondiente

// Después vamos donde le setea el glow al jugador
if (g_survivor[id]) fm_set_rendering(idkRenderFxGlowShell2020255kRenderNormal25)
// Y hacemos lo siguiente
if (g_sniper[id] && get_pcvar_num(cvar_sniperglow)) fm_set_rendering(idkRenderFxGlowShell20255255kRenderNormal25)
else if (
g_survivor[id]) fm_set_rendering(idkRenderFxGlowShell2020255kRenderNormal25)

// Más abajo agregamos
if (g_sniper[id] && get_pcvar_num(cvar_sniperaura)) set_task(0.1"snip_aura"id+TASK_AURA__"b"// Si es sniper, entonces llamamos la función para setear el aura al jugador

/* Al final del plugin pongan la función que llama el task "snip_aura" */
public snip_aura(taskid// Función que llama el task
{
    if (!
g_sniper[ID_AURA]) // Si el usuario no es sniper
    
{
        
remove_task(taskid); 
        return; 
// Removemos le task y retornamos
    
}
    
    static 
origin[3]; // Variable estática donde gaurdamos el origin del user (Posision X, Y y Z(
    
get_user_origin(ID_AURAorigin// Obtenemos el origin del usuario
    
    
message_begin(MSG_PVSSVC_TEMPENTITYorigin0// Iniciamos el mensaje para darle el color de aura al sniper
    
write_byte(TE_DLIGHT// TE = id, significa luz de alrededor
    
write_coord(origin[0]) // Origin posición X
    
write_coord(origin[1]) // Origin posición Y
    
write_coord(origin[2]) // Origin posición Z
    
write_byte(20// Radio del aura
    
write_byte(255// Rojo
    
write_byte(255// Verde
    
write_byte(0// Azul
    
write_byte(2// Ni me acuerdo :C
    
write_byte(0// Ni me acuerdo :_
    
message_end() // Finalizamos el mensaje
}

/* Vamos a check_round(); y hacemos lo siguiente */
// En if (g_zombie[leaving_player]...) debajo del else agregamos
if (g_sniper[leaving_player]) // Si el jugador que era sniper, se fue del server
{
    
humanme(id2// Convertimos al nuevo jugador en sniper
    
client_print(idprint_center"El sniper se ha ido.. En su lugar entró: %s"name// Ponemos el print para que nos diga que el sniper se fue
    // En caso de usar v4.3.. reemplazan name por g_playername[leaving_player] y si quieren cambiar client_print por zp_colored_print, no hay drama de hacerlo.
}

/* Vamos a flashlight_charge(); y agregamos */
if (g_sniper[ID_CHARGE])
{
    
remove_task(taskid); // Removemos el task del jugador con linterna 
    
return; // Retornamos
}

/* Vamos a reset_vars(); y agregamos */
g_sniper[id] = false // Seteamos la variable del sniper en falso, esto es para cuando es llamado la función reset_vars y se setean todas las variables en falso y una que otras en verdadero.

/* Vamos a ShowHUD(); y hacemos lo siguiente */
if (g_zombie[id])
{
    
// Seteamos el nombre de las clases en zombies
}
else
{
    
// Acá seteamos la del sniper en el HUD
    
if (g_sniper[id]) formatex(class, charsmax(class), "Sniper");
    else if (
g_survivor[id]) // Clases y más clases
}

/* Vamos a fnCheckLastZombie y ponemos el la condición */
// Last human
if (is_user_alive(id) && !g_zombie[id] && !g_survivor[id] && !g_sniper[id] && fnGetHumans() == 1)
{
        
// Si usan v4.3 verán más código, pero no influye mucho
    
g_lasthuman[id] = true
}

/* Vamos a set_user_flashlight */
// En la condición if (g_zombie[ID_FLASH] || g_survivor[ID_FLASH]...).. Agregamos
g_sniper[ID_FLASH]
// Dejandolo así
if (g_zombie[ID_FLASH] || g_survivor[ID_FLASH] || g_sniper[ID_FLASH] || !is_user_alive(ID_FLASH))

/* Vamos a replace_models (o replace_weapon_model) */
// Agregamos dentro del switch
case CSW_AWP:
{
    if (
g_sniper[id]) 
    {
        
set_pev(idpev_viewmodel2ModelWeaponSniper)
        
/* en caso de tener más de un model para tu arma
        set_pev(id, pev_viewmodel2, ModelWeaponSniper[random_num(1, charsmax(ModelWeaponSniper))]); */
    
}

5to paso: Agregamos la funciones del comando
Código PHP:
/* Si quieren pueden ponerlo en cualquier parte del plugin */
public cmdSniper(idlevelcid)
{
    if (!
cmd_access(idlevelcid2)) // Si tiene el acceso indicado en register_concmd (ADMIN_BAN) 
        
return PLUGIN_HANDLED// Retornamos

    
static iPlayeriArg[32]; // Creamos variables para detectar al jugador y el nombre del jugador
    
read_argv(1iArgcharsmax(iArg)); // Leemos y detectamos el jugador
    
iPlayer cmd_target(idiArg, (CMDTARGET_ONLY_ALIVE CMDTARGET_ALLOW_SELF)); // Damos el "tragecto" es decir, al jugador mientras este vivo.

    
if (equal(iArg"0")) // Si el admin escribe 0, en vez de algun jugador, eligira un sniper al azar.
    
{
        
iPlayer fnGetRandomAlive(random_num(1fnGetAlive()));
        
client_print(0print_notify"[ZP] No se ha encontrado al jugador. Por lo tanto se eligió uno al azar");
    }
    if (!
iPlayer) return PLUGIN_HANDLED// Si no se encontro al jugador, retorna

    
if (!allowed_sniper(iPlayer)) return PLUGIN_HANDLED// Si cumple la condición en allowed_sniper, retorna

    
command_sniper(iPlayer); // Llamamos a la función coomand_sniper, para convertir al jugador
    
return PLUGIN_HANDLED// Necesario return para que funcione el comando
}

allowed_sniper(id// Función para saber si poemos convertir al jugador en sniper
{
    if (
g_endround || g_sniper[id] || !is_user_alive(id) || task_exists(TASK_WELCOMEMSG) || (!g_newround && g_zombie[id] && fnGetZombies() == 1))
        return 
false// Si esto sucede, retornamos en flso
    
    
return true// Retornamos en verdadero si no se cumple la condición
}

command_sniper(idplayer)
{
    static 
iName[32], iName2[32]; // Creamos variables para llamar al nombre del jugador quien lanzó el modo y al quien convirtió
    
get_user_name(playeriNamecharsmax(iName)); // Obtenemos el nombre del jugador convertido
    
get_user_name(idiName2charsmax(iName2)); // Obtenemos el nombre del jugador o admin quien lanzó el modo

    
if (get_pcvar_num(cvar_logcommands)) // Si la cvar esta activada
    
{
        
// Aquí es donde guarda al player convetrido y demás datos en los logs del zombieplague
        
static logdata[100], authid[32], ip[16]
        
get_user_authid(idauthidcharsmax(authid))
        
get_user_ip(idipcharsmax(ip), 1)
        
formatex(logdatacharsmax(logdata), "ADMIN %s <%s><%s> - %s convertido en sniper (Players: %d/%d)"iName2authidipiNamefnGetPlaying(), g_maxplayers)
        
log_to_file("zombieplague.log"logdata)
    }
    
/* En caso de usar v4.3, borren la variable estatica iName y iName2 y cuando obtenemos el nombre (get_user_name) y reemplazamos iName por g_playername[player] y iName2 por g_playername[id] */
    
    
if (g_newround
    {
        
remove_task(TASK_MAKEZOMBIE)
        
make_a_zombie(MODE_SNIPERplayer)
    }
    else 
humanme(player20)
    
// Seguramente se preguntaran la diferencia de estos
    // Esto significa que si g_newround esta en true, es decir, si no hay ronda, entonces llamamos a make_a_zombie, para que lance el modo, junto al sonido, HUD y demás, y en cambio en else, convertimos directamente al humano o al jugador en sniper, sin necesidad de mostrar el HUD, sonidos y demás !


Bueno ya he terminado hasta aquí son 4 simples pero complicados pasos ! Jejeje ! Espero que les haya servido
Y para cualquier cosa, algo mal explicado, expresado, o falta algo, me dicen

Gracias a todos Gran sonrisa
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder


Mensajes en este tema
[TUT][ZP] Crear modos individuales - por CSAxel - 26/06/2014, 01:23 AM
RE: [TUT][ZP] Crear modos individuales - por Mía - 26/06/2014, 01:29 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 26/06/2014, 01:34 AM
RE: [TUT][ZP] Crear modos individuales - por Nike - 26/06/2014, 11:25 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 26/06/2014, 03:16 PM
RE: [TUT][ZP] Crear modos individuales - por kirito - 26/06/2014, 11:42 AM
RE: [TUT][ZP] Crear modos individuales - por Mía - 26/06/2014, 12:07 PM
RE: [TUT][ZP] Crear modos individuales - por Kane - 26/06/2014, 01:01 PM
RE: [TUT][ZP] Crear modos individuales - por kirito - 26/06/2014, 02:27 PM
RE: [TUT][ZP] Crear modos individuales - por xPecie - 26/06/2014, 07:29 PM
RE: [TUT][ZP] Crear modos individuales - por Nike - 26/06/2014, 08:03 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 27/06/2014, 01:57 AM
RE: [TUT][ZP] Crear modos individuales - por Nike - 27/06/2014, 04:03 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 27/06/2014, 05:28 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 27/06/2014, 06:04 PM
RE: [TUT][ZP] Crear modos individuales - por HK-416 - 29/12/2016, 12:29 AM
RE: [TUT][ZP] Crear modos individuales - por HK-416 - 29/12/2016, 12:38 AM
RE: [TUT][ZP] Crear modos individuales - por HK-416 - 29/12/2016, 01:40 AM
RE: [TUT][ZP] Crear modos individuales - por xPecie - 27/06/2014, 06:35 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 27/06/2014, 06:42 PM
RE: [TUT][ZP] Crear modos individuales - por xPecie - 02/08/2014, 11:29 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 13/07/2014, 11:43 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 25/07/2014, 01:10 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 25/07/2014, 01:20 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 25/07/2014, 01:27 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 25/07/2014, 03:09 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 26/07/2014, 01:17 AM
RE: [TUT][ZP] Crear modos individuales - por xPecie - 07/08/2014, 04:54 AM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 07/08/2014, 01:49 PM
RE: [TUT][ZP] Crear modos individuales - por xPecie - 07/08/2014, 02:05 PM
RE: [TUT][ZP] Crear modos individuales - por Kane - 24/10/2014, 09:15 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 26/10/2014, 11:42 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 27/10/2014, 05:19 PM
RE: [TUT][ZP] Crear modos individuales - por Luis._. - 30/05/2016, 08:46 PM
RE: [TUT][ZP] Crear modos individuales - por CSAxel - 30/05/2016, 09:23 PM
RE: [TUT][ZP] Crear modos individuales - por Luis._. - 01/06/2016, 09:45 PM
RE: [TUT][ZP] Crear modos individuales - por Skylar - 01/06/2016, 11:41 PM
RE: [TUT][ZP] Crear modos individuales - por Luis._. - 02/06/2016, 08:05 AM
RE: [TUT][ZP] Crear modos individuales - por HK-416 - 29/12/2016, 12:16 AM
RE: [TUT][ZP] Crear modos individuales - por wavee - 03/12/2018, 12:53 AM
RE: [TUT][ZP] Crear modos individuales - por Hinami - 03/12/2018, 12:57 AM
RE: [TUT][ZP] Crear modos individuales - por wavee - 03/12/2018, 06:33 PM
RE: [TUT][ZP] Crear modos individuales - por Nazy.- - 15/04/2020, 01:02 AM

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)