Enviar respuesta 
[TUT][ZP] Crear modos individuales
Autor Mensaje
CSAxel Sin conexión
Miembro Héroe


Plugin developer 1k
Mensajes: 1,837
Registro en: Dec 2013
Reputación: 40
Mensaje: #1
[TUT][ZP] Crear modos individuales
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
(Este mensaje fue modificado por última vez en: 26/07/2014 01:17 AM por CSAxel.)
26/06/2014 01:23 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Mario AR. Sin conexión
Super Mario 64


Plugin developer Donador Medalla de aportes 1k
Mensajes: 1,235
Registro en: Feb 2014
Reputación: 61
Mensaje: #2
RE: [TUT][ZP] Crear modos individuales
Buen tuto.
Podrías agregar un menú de jugadores para volver Sniper.

(10/05/2019 08:23 PM)Niper.-. escribió:  Trap no son tus putas trap es mi equipo tumbando el foro de amxmodx hey tumbando el foro hey tumbando el foroooo ya saben todos nos llevamos todos los pluginsss..

(18/02/2019 03:08 PM)Neeeeeeeeeel.- escribió:  Shit

(28/02/2015 03:27 AM)sasske escribió:  Vete al diablo detallista de mierda Oh god why

(26/12/2018 02:45 PM)[R]ak escribió:  yo solo te veo en whatsapp agarrando culos.. nose..

(09/06/2017 12:59 AM)kikizon2 escribió:  Quiero que leas las reglas, y si fuese posible que saltaras de un 10mo piso, pls.

(21/04/2017 01:27 AM)Chamo. escribió:  Cuanto hay que pagar para estar en tu firma TrolleyesThats what she said?

(20/04/2017 11:56 PM)matrix123 escribió:  Patrocinas rehlds? Es de lo único que hablas, mañana seguro te llegan remeras de rehlds, mandame una Whatever

(26/04/2017 08:47 PM)Dieguito escribió:  al que me salga con latinservers le meto un sugisaki por el c***

(26/02/2017 08:02 PM)meTaLiCroSS escribió:  La misma aritmetica se aplica con los Strings falsos que inventé ("trivago" y "pajarussel").

(13/02/2017 07:41 PM)Heber[$]ource escribió:  es nuvpawn, nos esta ddoseando con su sega genesis

(06/01/2015 10:47 PM)meTaLiCroSS escribió:  
(06/01/2015 10:40 PM)wiD escribió:  este chileno culiau :whatever;
¿Que?

(29/04/2016 11:44 PM)wiD escribió:  Te juro que si te tengo enfrente primero te piso con el auto y despues te meo en la boca.

(16/07/2014 06:38 PM)wiD escribió:  Mongito dame su name que quiero un chip para pegar todo cocow

(18/03/2015 02:04 PM)ErikMav94 escribió:  
(18/03/2015 02:03 PM)mongito100 escribió:  Son todos putos
escribís como el orto :trolleyes;

[Anti] escribió:Olle tranquilo cerebrito

(03/04/2015 12:16 AM)Treki escribió:  
(03/04/2015 12:11 AM)Sugisaki escribió:  cual plug?, el arkshine o el de arkshine?

Fixed*

(09/03/2015 09:49 PM)Moroha escribió:  Suspendieron al abaricioso platero de kikizon :trolleyes;

(26/05/2014 08:31 PM)ivan escribió:  hola quiero hacer combo para el party uso el de rank

(22/08/2014 11:41 PM)Store.gh escribió:  Join team de jeropito? A vos t hace falta un pito..

(26/02/2015 01:01 AM)meTaLiCroSS escribió:  
(26/02/2015 12:54 AM)sasske escribió:  Salida del horno nueva versión, que obsesionado estoy :3
PD: Me olvide de darle los créditos a metal xD, pobre metal xd
Da igual, dejalo como una enseñanza jejej no te llorare por unos creditos ehhmm hud...

(18/01/2015 12:31 AM)[R]ak escribió:  no me critican.. solo dicen boludeces

(05/01/2015 12:43 AM)roccoxx escribió:  Sentado en dust pensando como fui tan gil ♪
Image
26/06/2014 01:29 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
CSAxel Sin conexión
Miembro Héroe


Plugin developer 1k
Mensajes: 1,837
Registro en: Dec 2013
Reputación: 40
Mensaje: #3
RE: [TUT][ZP] Crear modos individuales
(26/06/2014 01:29 AM)Mario AR. escribió:  Buen tuto.
Podrías agregar un menú de jugadores para volver Sniper.
Si puede ser, pero es mas lindo usar comandos, para mi, en cambio si muchos me piden que haga un menú, lo agrego ! Guiño
26/06/2014 01:34 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Nike Sin conexión
Miembro


Mensajes: 208
Registro en: Nov 2013
Reputación: 4
Mensaje: #4
RE: [TUT][ZP] Crear modos individuales
Código PHP:
/* Vamos a humanme(); [PARTE IMPORTANTISIMA] y hacemos lo siguiente */
// Donde se encuentra if (survivor), lo cambiamos por
else if (survivor == 1)  no seria if???


// Después arriba de eso agregamos para convertir al player en sniper
if (survivor == 2// por que if? si no es el 1???

{
    
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


haaa?????? no entendi la verdad..... esa parte....

[Guia] Granada de Droga [actulizado 01/04/14]
[Guia] Cambio de leap zp 4.2 a 4.3

Zp 4.2 Extincion [Beta+Lvl] Edicion 0.1 (%95) terminado
(Este mensaje fue modificado por última vez en: 26/06/2014 11:25 AM por Nike.)
26/06/2014 11:25 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kirito Sin conexión
Miembro Sr.


Mensajes: 474
Registro en: Oct 2013
Reputación: 4
Mensaje: #5
RE: [TUT][ZP] Crear modos individuales
Es el único error que tiene o sigue mas por lo visto esta bien echo aparte de ese pequeño error Gran sonrisa sigue así Axel Gran sonrisa

Mientras creces maduras y luego vez que dejas de ser un bebe y quieres aprender,ayudar y no ser egoísta.
26/06/2014 11:42 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Mario AR. Sin conexión
Super Mario 64


Plugin developer Donador Medalla de aportes 1k
Mensajes: 1,235
Registro en: Feb 2014
Reputación: 61
Mensaje: #6
RE: [TUT][ZP] Crear modos individuales
(26/06/2014 11:42 AM)kirito escribió:  Es el único error que tiene o sigue mas por lo visto esta bien echo aparte de ese pequeño error Gran sonrisa sigue así Axel Gran sonrisa

No es un error.

(10/05/2019 08:23 PM)Niper.-. escribió:  Trap no son tus putas trap es mi equipo tumbando el foro de amxmodx hey tumbando el foro hey tumbando el foroooo ya saben todos nos llevamos todos los pluginsss..

(18/02/2019 03:08 PM)Neeeeeeeeeel.- escribió:  Shit

(28/02/2015 03:27 AM)sasske escribió:  Vete al diablo detallista de mierda Oh god why

(26/12/2018 02:45 PM)[R]ak escribió:  yo solo te veo en whatsapp agarrando culos.. nose..

(09/06/2017 12:59 AM)kikizon2 escribió:  Quiero que leas las reglas, y si fuese posible que saltaras de un 10mo piso, pls.

(21/04/2017 01:27 AM)Chamo. escribió:  Cuanto hay que pagar para estar en tu firma TrolleyesThats what she said?

(20/04/2017 11:56 PM)matrix123 escribió:  Patrocinas rehlds? Es de lo único que hablas, mañana seguro te llegan remeras de rehlds, mandame una Whatever

(26/04/2017 08:47 PM)Dieguito escribió:  al que me salga con latinservers le meto un sugisaki por el c***

(26/02/2017 08:02 PM)meTaLiCroSS escribió:  La misma aritmetica se aplica con los Strings falsos que inventé ("trivago" y "pajarussel").

(13/02/2017 07:41 PM)Heber[$]ource escribió:  es nuvpawn, nos esta ddoseando con su sega genesis

(06/01/2015 10:47 PM)meTaLiCroSS escribió:  
(06/01/2015 10:40 PM)wiD escribió:  este chileno culiau :whatever;
¿Que?

(29/04/2016 11:44 PM)wiD escribió:  Te juro que si te tengo enfrente primero te piso con el auto y despues te meo en la boca.

(16/07/2014 06:38 PM)wiD escribió:  Mongito dame su name que quiero un chip para pegar todo cocow

(18/03/2015 02:04 PM)ErikMav94 escribió:  
(18/03/2015 02:03 PM)mongito100 escribió:  Son todos putos
escribís como el orto :trolleyes;

[Anti] escribió:Olle tranquilo cerebrito

(03/04/2015 12:16 AM)Treki escribió:  
(03/04/2015 12:11 AM)Sugisaki escribió:  cual plug?, el arkshine o el de arkshine?

Fixed*

(09/03/2015 09:49 PM)Moroha escribió:  Suspendieron al abaricioso platero de kikizon :trolleyes;

(26/05/2014 08:31 PM)ivan escribió:  hola quiero hacer combo para el party uso el de rank

(22/08/2014 11:41 PM)Store.gh escribió:  Join team de jeropito? A vos t hace falta un pito..

(26/02/2015 01:01 AM)meTaLiCroSS escribió:  
(26/02/2015 12:54 AM)sasske escribió:  Salida del horno nueva versión, que obsesionado estoy :3
PD: Me olvide de darle los créditos a metal xD, pobre metal xd
Da igual, dejalo como una enseñanza jejej no te llorare por unos creditos ehhmm hud...

(18/01/2015 12:31 AM)[R]ak escribió:  no me critican.. solo dicen boludeces

(05/01/2015 12:43 AM)roccoxx escribió:  Sentado en dust pensando como fui tan gil ♪
Image
26/06/2014 12:07 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Kane Sin conexión
Miembro Sr.


Mensajes: 532
Registro en: Feb 2014
Reputación: 17
Mensaje: #7
RE: [TUT][ZP] Crear modos individuales
Código PHP:
new const ModelSniper[] = "zp_sniper"
new const ModelWeaponSniper[] = "v_sniperawp"
new const SoundSniper[] = "zombie_plague/zp_sniper.wav"

/* Jugador */
formatex(playermodelcharsmax(playermodel), "models/player/%s/%s.mdl"ModelSniperModelSniper)
 if (
file_exists(playermodel)) precache_model(playermodel)

/* Arma */
formatex(playermodelcharsmax(playermodel), "models/zombie_plague/%s.mdl"ModelWeaponSniper)
 if (
file_exists(playermodel)) precache_model(ModelWeaponSniper)
/* Sonido */
 
if (file_exists(SoundSniper)) precache_sound(SoundSniper
o

Código PHP:
new const ModelSniper[][] = { "zp_sniper""zp_sniper2" }
new const 
ModelWeaponSniper[][] = { "v_sniperawp""p_sniér" }
new const 
SoundSniper[][] = { "zombie_plague/zp_sniper.wav" }

for (
0sizeof (ModelSniper); i++)
{
    
formatex(playermodelcharsmax(playermodel), "models/player/%s/%s.mdl"ModelSniper[i], ModelSniper[i]);
    if (
file_exists(playermodel)) precache_model(playermodel[i]);
}

for (
0sizeof (ModelWeaponSniper); i++)
{
    
formatex(playermodelcharsmax(playermodel), "models/zombie_plague/%s.mdl"ModelWeaponSniper[i]);
    if (
file_exists(playermodel)) precache_model(ModelWeaponSniper[i]); 
}

for (
0sizeof (SoundSniper); i++)
     if (
file_exists(SoundSniper[i]))
          
precache_sound(SoundSniper[i]) 
Si pones new const as[] = "v_hola.mdl" no hace falta hacer un loop, en cambio si haces new const as[][] = { "v_hola.mdl", "v_chau.mdl" }

Igual esta todo bastante bien Sonrisa

(19/06/2014 11:08 PM)01011001 escribió:  No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014 11:08 PM)[R]ak escribió:  Mis conocimientos aumentaron un 500% con este post
(Este mensaje fue modificado por última vez en: 26/06/2014 01:03 PM por Kane.)
26/06/2014 01:01 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
kirito Sin conexión
Miembro Sr.


Mensajes: 474
Registro en: Oct 2013
Reputación: 4
Mensaje: #8
RE: [TUT][ZP] Crear modos individuales
Si meto este mod a mi zp no generara bugs?

Mientras creces maduras y luego vez que dejas de ser un bebe y quieres aprender,ayudar y no ser egoísta.
26/06/2014 02:27 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
CSAxel Sin conexión
Miembro Héroe


Plugin developer 1k
Mensajes: 1,837
Registro en: Dec 2013
Reputación: 40
Mensaje: #9
RE: [TUT][ZP] Crear modos individuales
(26/06/2014 11:25 AM)Nike escribió:  
Código PHP:
/* Vamos a humanme(); [PARTE IMPORTANTISIMA] y hacemos lo siguiente */
// Donde se encuentra if (survivor), lo cambiamos por
else if (survivor == 1)  no seria if???


// Después arriba de eso agregamos para convertir al player en sniper
if (survivor == 2// por que if? si no es el 1???

{
    
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


haaa?????? no entendi la verdad..... esa parte....
Es demasiado simple boludo -.-
Si el parametro survivor es igual a 1, es survivor, en cambio si es 2 va a ser sniper
En cambio quedaría así
Código PHP:
if (survivor == 2// Es sniper
{
    
// Estadísticas base
}
else if (
survivor == 1// Es survivor
{
   
// Estadisticas base
}
else
{
    
// Estadisticas bases del humano


(26/06/2014 01:01 PM)Kane escribió:  
Código PHP:
new const ModelSniper[] = "zp_sniper"
new const ModelWeaponSniper[] = "v_sniperawp"
new const SoundSniper[] = "zombie_plague/zp_sniper.wav"

/* Jugador */
formatex(playermodelcharsmax(playermodel), "models/player/%s/%s.mdl"ModelSniperModelSniper)
 if (
file_exists(playermodel)) precache_model(playermodel)

/* Arma */
formatex(playermodelcharsmax(playermodel), "models/zombie_plague/%s.mdl"ModelWeaponSniper)
 if (
file_exists(playermodel)) precache_model(ModelWeaponSniper)
/* Sonido */
 
if (file_exists(SoundSniper)) precache_sound(SoundSniper
o

Código PHP:
new const ModelSniper[][] = { "zp_sniper""zp_sniper2" }
new const 
ModelWeaponSniper[][] = { "v_sniperawp""p_sniér" }
new const 
SoundSniper[][] = { "zombie_plague/zp_sniper.wav" }

for (
0sizeof (ModelSniper); i++)
{
    
formatex(playermodelcharsmax(playermodel), "models/player/%s/%s.mdl"ModelSniper[i], ModelSniper[i]);
    if (
file_exists(playermodel)) precache_model(playermodel[i]);
}

for (
0sizeof (ModelWeaponSniper); i++)
{
    
formatex(playermodelcharsmax(playermodel), "models/zombie_plague/%s.mdl"ModelWeaponSniper[i]);
    if (
file_exists(playermodel)) precache_model(ModelWeaponSniper[i]); 
}

for (
0sizeof (SoundSniper); i++)
     if (
file_exists(SoundSniper[i]))
          
precache_sound(SoundSniper[i]) 
Si pones new const as[] = "v_hola.mdl" no hace falta hacer un loop, en cambio si haces new const as[][] = { "v_hola.mdl", "v_chau.mdl" }

Igual esta todo bastante bien Sonrisa
Con eso me di cuenta de algo para correjir, pero no le vi la "ayuda" porque ya lo expliqué creo xD. Igual gracias de todos modos

(26/06/2014 02:27 PM)kirito escribió:  Si meto este mod a mi zp no generara bugs?
Si lo haces BIEN, etonces no supondría que tendrás bugs, aparte depende como esté hecho tu ZP.. Para adaptar el modo. Pero lo saque de mi ZP y esta bien hecho el modo.
(Este mensaje fue modificado por última vez en: 26/06/2014 03:21 PM por CSAxel.)
26/06/2014 03:16 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,961
Registro en: Oct 2013
Reputación: 36
Mensaje: #10
RE: [TUT][ZP] Crear modos individuales
podrías hacer switch en vez de else if Whatever

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
26/06/2014 05:28 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS