Senior Member
|
01-23-2011
, 00:47
[ZP]Crear modo L4D básico
|
#1
|
Bueno les vengo a enseñar como crear modo L4D basicamente (4 humanos vs el resto de zombies).
Pasos:
*Ingreso del modo en los modos del zp, creación de variables y cvars para el modo.
*Registramos los valores de los cvars
*Seteamos la ronda l4d en false
*Creación del cmd del modo l4d
*Creamos el comando para ejecutar el modo
*Creamos la estructura del modo
-->Paso (1): Ingreso del modo en los modos del zp, creación de variables y cvars para el modo
PHP Code:
*Buscamos lo siguiente: Game modes.
// Debajo de MODE_MULTI ponemos:
MODE_L4D // registramos el modo l4d
// Quedaría:
MODE_MULTI,
MODE_L4D,
MODE_PLAGUE
*Ahora Buscamos: Player Vars, no interesa mucho la ubicación donde creemos las variables, mientras no esten en algun public
// Debajo de eso ponemos:
new g_l4dround // Creamos una variable para utilizarla como la ronda del modo l4d en el zp
new cvar_l4d,cvar_l4dchance,cvar_l4dminplayers,cvar_l4dratio // creamos las cvars [variables numericas que pueden ser modificadas por comandos en el cs] para determinar si esta habilidato, cada cuanto se pone el modo, los jugadores minimos necesarios y el radio. [Pueden ponerlas abajo de las otras cvars que utiliza el zp pero para mi queda mejor y mas accesible poniendolas aparte]
--> Paso (2): Registramos los valores de los cvars
PHP Code:
*Nos Vamos A: public plugin_init() [Aqui se registran los comandos de los menus, cvars, commands] y ahi buscamos lo siguiente: // CVARS - Survivor
// debajo de eso ponemos:
// Cvar- L4D Mode
cvar_l4d = register_cvar("zp_l4d_enabled", "1") //[Utilizamos esta cvar para determinar el modo como compatible para que lo comienze el sv] habilita el modo [ 0 /disabled | 1 /enabled ]
cvar_l4dchance = register_cvar("zp_l4d_chance", "20") // determina que el modo se haga cada 20 rondas [se puede cambiar por el intervalo que quieran]
cvar_l4dminplayers = register_cvar("zp_l4d_min_players", "9") // Establece que la cantidad minima de players online [defoult es 9, pero pueden poner de 5 para arriba]
cvar_l4dratio = register_cvar("zp_l4d_ratio", "0.5") // establece 1 radio de 0.5 [radio de spawn de los jugadores]
// Quedaría:
// CVARS - Survivor
cvar_surv = register_cvar("zp_surv_enabled", "1")
cvar_survchance = register_cvar("zp_surv_chance", "20")
cvar_survminplayers = register_cvar("zp_surv_min_players", "0")
cvar_survhp = register_cvar("zp_surv_health", "0")
cvar_survbasehp = register_cvar("zp_surv_base_health", "0")
cvar_survspd = register_cvar("zp_surv_speed", "230")
cvar_survgravity = register_cvar("zp_surv_gravity", "1.25")
cvar_survglow = register_cvar("zp_surv_glow", "1")
cvar_survaura = register_cvar("zp_surv_aura", "1")
cvar_survpainfree = register_cvar("zp_surv_painfree", "1")
cvar_survignorefrags = register_cvar("zp_surv_ignore_frags", "1")
cvar_survignoreammo = register_cvar("zp_surv_ignore_rewards", "1")
cvar_survweapon = register_cvar("zp_surv_weapon", "weapon_m249")
// Cvar- L4D Mode
cvar_l4d = register_cvar("zp_l4d_enabled", "1") // habilita el modo [ 0 /disabled | 1 /enabled ]
cvar_l4dchance = register_cvar("zp_l4d_chance", "20") // determina que el modo se haga cada 20 rondas
cvar_l4dminplayers = register_cvar("zp_l4d_min_players", "9") // Establece que la cantidad minima de players es 9
cvar_l4dratio = register_cvar("zp_l4d_ratio", "0.5") // establece 1 radio de 0.5
--> Paso(3): Seteamos la ronda l4d en false
PHP Code:
// Vamos a: public event_round_start() [public de cuando empieza una ronda] y ahi buscamos: // New round starting
// Debajo de g_survround = false ponemos
g_l4dround = false //[sirve para determinar como true(verdadero)/false(falso) la ronda l4d ]Estamos seteando que cuando empieze la ronda este en false el modo
// Quedaría:
g_survround = false
g_l4dround = false
g_nemround = false
--> Paso(4): Creación del cmd del modo l4d
PHP Code:
// Nos Vamos A: public plugin_init() [explicado anteriormente] y buscamos: // Admin commands [Aqui por lo general se encuentran los comandos de los admines, esto es para un code mas proligo pero lo pueden sacar de ese comentario y ponerlo en otro lado del plugin init]
// Debajo de: register_concmd("zp_survivor", "cmd_survivor", ACCESS_FLAG, "<target> - Turn someone into a Survivor") ponemos:
register_concmd("zp_l4d", "cmd_l4d", ACCESS_FLAG, " - Empezar Modo L4D") //[el code este registra 1 cmd] aqui estamos registrando el cmd para cuando un admin empieza el modo o alguien con ese acceso
// Quedaria:
register_concmd("zp_survivor", "cmd_survivor", ACCESS_FLAG, "<target> - Turn someone into a Survivor")
register_concmd("zp_l4d", "cmd_l4d", ACCESS_FLAG, " - Empezar Modo L4D")
// Nos Vamos Debajo De: public cmd_survivor(id, level, cid) y ponemos nuestro cmd:
public cmd_l4d(id, level, cid) //[este es el cmd para el comando del modo, donde se determina si esta permitido, por acceso o por si es compatible y comienza el modo si se puede] Publicamos el cmd
{
// chckeamos si se tiene acceso
if (!cmd_access(id, level, cid, 1))//[si no tiene acceso]
return PLUGIN_HANDLED;//[no realiza el modo]
// Checkeamos si es compatible con el modo swarm (si se puede empezar)
if (!allowed_swarm())//[si es compatible con el modo swarm]
{
client_print(id, print_console, "[ZP] %L", id, "CMD_NOT") // Mostramos el cartel de "CMD_NOT" para determinar que no se puede si no es compatible
return PLUGIN_HANDLED;
}
command_l4d(id) // ejecutamos el comando del l4d
return PLUGIN_HANDLED;
}
// Quedaría:
public cmd_survivor(id, level, cid)
{
// Check for access flag
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED;
// Retrieve arguments
static arg[32], player
read_argv(1, arg, sizeof arg - 1)
player = cmd_target(id, arg, CMDTARGET_ONLY_ALIVE | CMDTARGET_ALLOW_SELF)
// Invalid target
if (!player) return PLUGIN_HANDLED;
// Target not allowed to be survivor
if (!allowed_survivor(player))
{
client_print(id, print_console, "[ZP] %L", id, "CMD_NOT")
return PLUGIN_HANDLED;
}
command_survivor(id, player)
return PLUGIN_HANDLED;
}
public cmd_l4d(id, level, cid)
{
// Check for access flag
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
// Swarm mode not allowed
if (!allowed_swarm())
{
client_print(id, print_console, "[ZP] %L", id, "CMD_NOT")
return PLUGIN_HANDLED;
}
command_l4d(id)
return PLUGIN_HANDLED;
}
--> Paso(5): Creamos el comando para ejecutar el modo
PHP Code:
//Nos vamos a: // Admin Command. zp_survivor y debajo de todo el comand del survivor ponemos el nuestro:
command_l4d(id)
{
static name1[32]
get_user_name(id, name1, sizeof name1 - 1)//[para mostrar la persona, normalmente se utiliza para un hud mostrando por ej cuando 1 persona sube de lvl en algunos zps, si algun admin crea 1 mod, etc.]
// Mostramos si ahi actividad de admin o no
switch (get_pcvar_num(cvar_showactivity))//[creamos una comparacion de la actividad del admin]
{
case 1: client_print(0, print_chat, "ADMIN - %L", LANG_PLAYER, "CMD_L4D") // Mostramos que el admin inicio el modo l4d
case 2: client_print(0, print_chat, "ADMIN %s - %L", name1, LANG_PLAYER, "CMD_L4D") // Mostramos si se inicio el modo l4d
}
// Registrar en archivo de registro Zombie Plague?
if (get_pcvar_num(cvar_logcommands))
{
static logdata[100], authid[32], ip[16]
get_user_authid(id, authid, sizeof authid - 1)//[obtenemos la id (nick del usuario) conectado]
get_user_ip(id, ip, sizeof ip - 1, 1)//[obtenemos la ip conectado]
formatex(logdata, sizeof logdata - 1, "ADMIN %s <%s><%s> - %L (Players: %d/%d)", name1, authid, ip, LANG_SERVER, "CMD_SWARM", fnGetPlaying(), g_maxplayers)//[registramos la acción realizada por el admin en el zombieplague.log]
log_to_file("zombieplague.log", logdata)
}
// LLamamos al modo L4D
remove_task(TASK_MAKEZOMBIE)//[removemos el task del modo infeccion comun para iniciar el de nuestro modo]
make_a_zombie(MODE_L4D, 0)//[comenzamos nuestro modo]
}
// Quedaría:
command_survivor(id, player)
{
static name1[32], name2[32]
get_user_name(id, name1, sizeof name1 - 1)
get_user_name(player, name2, sizeof name2 - 1)
// Show activity?
switch (get_pcvar_num(cvar_showactivity))
{
case 1: client_print(0, print_chat, "ADMIN - %s %L", name2, LANG_PLAYER, "CMD_SURVIVAL")
case 2: client_print(0, print_chat, "ADMIN %s - %s %L", name1, name2, LANG_PLAYER, "CMD_SURVIVAL")
}
// Log to Zombie Plague log file?
if (get_pcvar_num(cvar_logcommands))
{
static logdata[100], authid[32], ip[16]
get_user_authid(id, authid, sizeof authid - 1)
get_user_ip(id, ip, sizeof ip - 1, 1)
formatex(logdata, sizeof logdata - 1, "ADMIN %s <%s><%s> - %s %L (Players: %d/%d)", name1, authid, ip, name2, LANG_SERVER,"CMD_SURVIVAL", fnGetPlaying(), g_maxplayers)
log_to_file("zombieplague.log", logdata)
}
// Turn into a Survivor
remove_task(TASK_MAKEZOMBIE)
make_a_zombie(MODE_SURVIVOR, player)
}
command_l4d(id)
{
static name1[32]
get_user_name(id, name1, sizeof name1 - 1)
// Show activity?
switch (get_pcvar_num(cvar_showactivity))
{
case 1: client_print(0, print_chat, "ADMIN - %L", LANG_PLAYER, "CMD_L4D")
case 2: client_print(0, print_chat, "ADMIN %s - %L", name1, LANG_PLAYER, "CMD_L4D")
}
// Log to Zombie Plague log file?
if (get_pcvar_num(cvar_logcommands))
{
static logdata[100], authid[32], ip[16]
get_user_authid(id, authid, sizeof authid - 1)
get_user_ip(id, ip, sizeof ip - 1, 1)
formatex(logdata, sizeof logdata - 1, "ADMIN %s <%s><%s> - %L (Players: %d/%d)", name1, authid, ip, LANG_SERVER, "CMD_SWARM", fnGetPlaying(), g_maxplayers)
log_to_file("zombieplague.log", logdata)
}
// Call Swarm Mode
remove_task(TASK_MAKEZOMBIE)
make_a_zombie(MODE_L4D, 0)
}
--> Paso(6): Creamos la estructura del modo
PHP Code:
//Nos Vamos A: if ((mode == MODE_NONE && (!preventconsecutive || g_lastmode != MODE_SURVIVOR) && random_num(1, get_pcvar_num(cvar_survchance)) == get_pcvar_num(cvar_surv) && iPlayersnum >= get_pcvar_num(cvar_survminplayers)) || mode == MODE_SURVIVOR).
//Debajo de todo este if se encuentra // Round start forward, que contiene:
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_SURVIVOR, forward_id);
}
// Abajo de este corchete ponemos nuestra estructura:
else if ((mode == MODE_NONE && (!preventconsecutive || g_lastmode != MODE_L4D) && random_num(1, get_pcvar_num(cvar_l4dchance)) == get_pcvar_num(cvar_l4d) && floatround((iPlayersnum-2)*get_pcvar_float(cvar_l4dratio), floatround_ceil) >= 1 && iPlayersnum >= get_pcvar_num(cvar_l4dminplayers)) || mode == MODE_L4D)//[registramos si no es alguno de los otros modos realiza una pregunta si es compatible con todas las cvars creadas por nosotros (pd. pcvar_float es una cvar permanente, pcvar_num es una cvar numerica)]
{
//Modo L4D
g_l4dround = true // Establecemos la ronda del modo l4d como true
g_swarmround = true // Establecemos la ronda del modo swarm como true para que no se infecten a los humanos
for (id = 1; id <= g_maxplayers; id++)//[para todos los jugadores que esten conectados]
{
// si no esta vivo
if (!is_user_alive(id))
continue;//[no continuar]
// si es un zombie
if (g_zombie[id])
continue;
// Convertir en zombie
zombieme(id, 0, 0, 1)
// Convierte a todos en zombies a menos que no este vivo o que ya sea zombie
}
// Convertir 4 de los zombies en Humanos
for ( new i = 0; i < 4; i++ )//[para que sean 4 jugadores los que se conviertan en humanos]
{
id = fnGetRandomAlive( random_num( 1, iPlayersnum ) )//[este code sirve para elegir a alguien al azar]
if ( g_zombie[id] )//[ si no es zombie]
humanme( id, 0 ) //[los convierte en humano solo a 4 recuerden]
else//[sino]
i--//[no lo convertimos en humano]
}
// Establecemos el sonido del modo plague como el del l4d
PlaySound(sound_plague[random_num(0, sizeof sound_plague -1)]); // podemos cambiarlo por cualquier otro sonido de otro modo o registrar uno propio
// Mostramos la noticia del modo en un HuD
set_hudmessage(0, 50, 200, -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)//[aqui se muestra el color y la posicion]
ShowSyncHudMsg(0, g_MsgSync, "%L", LANG_PLAYER, "NOTICE_L4D")//[muestra el hud por un tiempito diciendo el mensaje del lang_player registrado como notice_l4d]
// Ejecutamos la ronda de modo L4D
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_L4D, 0);
}
// Quedaría:
if ((mode == MODE_NONE && (!preventconsecutive || g_lastmode != MODE_SURVIVOR) && random_num(1, get_pcvar_num(cvar_survchance)) == get_pcvar_num(cvar_surv) && iPlayersnum >= get_pcvar_num(cvar_survminplayers)) || mode == MODE_SURVIVOR)
{
// Survivor Mode
g_survround = true
g_swarmround = true
g_lastmode = MODE_SURVIVOR
// Choose player randomly?
if (mode == MODE_NONE)
id = fnGetRandomAlive(random_num(1, iPlayersnum))
// Remember id for calling our forward later
forward_id = id
// Turn player into a survivor
humanme(id, 1)
// Turn the remaining players into zombies
for (id = 1; id <= g_maxplayers; id++)
{
// Not alive
if (!is_user_alive(id))
continue;
// Survivor or already a zombie
if (g_survivor[id] || g_zombie[id])
continue;
// Turn into a zombie
zombieme(id, 0, 0, 1)
}
// Play survivor sound
PlaySound(sound_survivor[random_num(0, sizeof sound_survivor -1)]);
// Get player's name
get_user_name(forward_id, name, sizeof name - 1)
// Show Survivor HUD notice
set_hudmessage(20, 20, 255, HUD_EVENT_X, HUD_EVENT_Y, 1, 0.0, 5.0, 1.0, 1.0, -1)
ShowSyncHudMsg(0, g_MsgSync, "%L", LANG_PLAYER, "NOTICE_SURVIVOR", name)
// Round start forward
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_SURVIVOR, forward_id);
}
else if ((mode == MODE_NONE && (!preventconsecutive || g_lastmode != MODE_L4D) && random_num(1, get_pcvar_num(cvar_l4dchance)) == get_pcvar_num(cvar_l4d) && floatround((iPlayersnum-2)*get_pcvar_float(cvar_l4dratio), floatround_ceil) >= 1 && iPlayersnum >= get_pcvar_num(cvar_l4dminplayers)) || mode == MODE_L4D)
{
//Modo L4D
g_l4dround = true // Establecemos la ronda del modo l4d como true
g_swarmround = true // Establecemos la ronda del modo swarm como true para que no se infecten a los humanos
for (id = 1; id <= g_maxplayers; id++)
{
// si no esta vivo
if (!is_user_alive(id))
continue;
// si es un zombie
if (g_zombie[id])
continue;
// Convertir en zombie
zombieme(id, 0, 0, 1)
// Convierte a todos en zombies a menos que no este vivo o que ya sea zombie
}
// Convertir 4 de los zombies en Humanos
id = fnGetRandomAlive(random_num(1, iPlayersnum))
humanme(id, 0) // Convertimos a alguien al azar en humano
id = fnGetRandomAlive(random_num(1, iPlayersnum))
if (g_zombie[id])
{
humanme(id, 0) // Convertimos a alguien al azar en humano mientras no sea el humano ya establecido
}
id = fnGetRandomAlive(random_num(1, iPlayersnum))
if (g_zombie[id])
{
humanme(id, 0) // Convertimos a alguien al azar en humano mientras no sea el humano ya establecido
}
id = fnGetRandomAlive(random_num(1, iPlayersnum))
if (g_zombie[id])
{
humanme(id, 0) // Convertimos a alguien al azar en humano mientras no sea el humano ya establecido
}
// Establecemos el sonido del modo plague como el del l4d
PlaySound(sound_plague[random_num(0, sizeof sound_plague -1)]); // podemos cambiarlo por cualquier otro sonido de otro modo o registrar uno propio
// Mostramos la noticia del modo en un HuD
set_hudmessage(0, 50, 200, -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
ShowSyncHudMsg(0, g_MsgSync, "%L", LANG_PLAYER, "NOTICE_L4D")
// Ejecutamos la ronda de modo L4D
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_L4D, 0);
}
Info Extra:
En la estructura del modo L4D Pueden cambiar a decision propia como quieran en vez de humanme(id, 0) // humano, humanme(id, 1) // survivor, tambien a la vez pueden cambiar los zombies de zombieme(id, 0, 0, 1) // zombies a zombieme(id, 0, 1, 0).
Recuerden que si cambian a nemesis tienen que cambiar el if de si es zombie de if (g_zombie[id]) a if (g_nemesis[id])
Pueden agregarle:
Pueden agregarle un arma determinada a los humanos del modo tal como la escopeta, la uzi y la sniper colocando de una forma sencilla debajo de:
humanme(id, 0)
fm_strip_user_weapons(id) // quitamos todas las armas
fm_give_item(id, "weapon_knife") // damos cuchillo
fm_give_item(id, "weapon_m3") // damos escopeta [ weapon_m3 (escopeta semi automatica) / weapon_mac10 (uzi) / weapon_awp (sniper magnum) ]
Para que sea en todos los humanos tendrian que ponerlo debajo de todos los humanme(id, 0)
Si tienen alguna duda pregunten voy a tratar de solucionar todos sus problemas, y si ahi algo mal avisen por favor haci lo corrijo, si desean que agregue alguna epxlicación solo pidanlo.:angel:
creditos: stick por crear el modo, kiske y after quienes me ayudan con ls problemas q tengo
ante cualquier duda [email protected]
Last edited by stickcs; 02-12-2011 at 22:24.
|
|