Bien, antes de nada, decir que esto lo hago de memoria, puesto que estoy sin CS y no lo puedo testear, pero supongo que todo este bien
.
Empezemos pues...
Como añadir el modo Armageddon al ZP 4.3
Ire diciendo que hay que crear y explicandolo (de arriba a abajo del plugin).
En
Game Modes
añadiremos el nuestro el
MODE_ARMAGEDDON
PHP Code:
// Game modes
enum
{
MODE_NONE = 0,
MODE_INFECTION,
MODE_NEMESIS,
MODE_SURVIVOR,
MODE_SWARM,
MODE_MULTI,
MODE_PLAGUE, // Importante ponerle la coma
MODE_ARMAGEDDON // Modo armageddon
}
En
Game vars añadiremos la ronda armageddon
PHP Code:
// Game vars
g_armageddonround
En
CVARs pointers añadiremos las cvars del modo
PHP Code:
// CVAR pointers
new cvar_armageddon, cvar_armageddonchance, cvar_armageddonminplayers // Modo armageddon
En
plugin_init() registraremos las cvars y añadiremos el comando para comenzar el modo
PHP Code:
// Modo armageddon !
register_concmd("zp_arma", "cmd_armageddon", _, " - Comenzar el Modo Armageddon", 0)
// ..................
// CVARS - Armageddon Mode
cvar_armageddon = register_cvar("zp_arma_enabled", "1") // On/Off
cvar_armageddonchance = register_cvar("zp_arma_chance", "15") // Chance
cvar_armageddonminplayers = register_cvar("zp_arma_min_players", "14") // Min Players
En
event_round_start() setearemos la ronda armageddon en false
PHP Code:
g_armageddonround = false // Armageddon round
Tambien tenemos que añadir este public
PHP Code:
// zp_armageddon
public cmd_armageddon(id, level, cid)
{
// Check for access flag - Mode Swarm
if (!cmd_access(id, g_access_flag[ACCESS_MODE_SWARM], cid, 2))
return PLUGIN_HANDLED;
// Swarm mode not allowed
if (!allowed_armageddon())
{
client_print(id, print_console, "[ZP] %L", id, "CMD_NOT")
return PLUGIN_HANDLED;
}
command_armageddon(id)
return PLUGIN_HANDLED;
}
Ahora añadiremos la funcion principal... la añadiremos justo debajo del } de abajo de
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_PLAGUE, 0);
PHP Code:
else if ((mode == MODE_NONE && (!get_pcvar_num(cvar_preventconsecutive) || g_lastmode != MODE_ARMAGEDDON) && random_num(1, get_pcvar_num(cvar_armageddonchance)) == get_pcvar_num(cvar_armageddon) && iPlayersnum >= get_pcvar_num(cvar_armageddonminplayers)) || mode == MODE_ARMAGEDDON/*Enserionotefuncionaquitatodoestojuntoynocopiesypeges )*/
{
// Armageddon Mode
g_armageddonround = true
g_lastmode = MODE_ARMAGEDDON
// Turn all players into Nemesis/Survivors
for (id = 1; id <= g_maxplayers; id++)
{
// Si no esta vivo lo ignoramos
if (!g_isalive[id])
continue
// Nemesis o Survivor?
switch(random_num(1,2))
{
case 1 :
{
// Nemesis
zombieme(id, 0, 1, 0, 0)
// Health /3
fm_set_user_health(id, pev(id, pev_health) / 3)
}
case 2 :
{
// Survivor
humanme(id, 1, 0)
// Health *2
fm_set_user_health(id, pev(id, pev_health) * 2)
}
}
}
// Play swarm sound
ArrayGetString(sound_swarm, random_num(0, ArraySize(sound_swarm) - 1), sound, charsmax(sound))
PlaySound(sound);
// Show Swarm HUD notice
set_hudmessage(20, 255, 20, HUD_EVENT_X, HUD_EVENT_Y, 1, 0.0, 5.0, 1.0, 1.0, -1)
ShowSyncHudMsg(0, g_MsgSync, "Modo Armageddon!!")
// Mode fully started!
g_modestarted = true
// Round start forward
ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_ARMAGEDDON, 0);
}
Y luego, hace falta otra funcion (no es requerida, pero es por si alguien quiere poner mas condiciones o algo asi o.o)
PHP Code:
allowed_armageddon()
{
if (g_endround || !g_newround || task_exists(TASK_WELCOMEMSG))
return false;
return true;
}
Y otra mas que hace falta
PHP Code:
command_armageddon(id)
{
// Show activity?
switch (get_pcvar_num(cvar_showactivity))
{
case 1: client_print(0, print_chat, "ADMIN - Comenzar Modo Armageddon")
case 2: client_print(0, print_chat, "ADMIN %s - Comenzar Modo Armageddon", g_playername[id])
}
// Log to Zombie Plague log file?
if (get_pcvar_num(cvar_logcommands))
{
static logdata[100], authid[32], ip[16]
get_user_authid(id, authid, charsmax(authid))
get_user_ip(id, ip, charsmax(ip), 1)
formatex(logdata, charsmax(logdata), "ADMIN %s <%s><%s> - Comenzar Modo Armageddon (Jugadores: %d/%d)", g_playername[id], authid, ip, fnGetPlaying(), g_maxplayers)
log_to_file("zombieplague.log", logdata)
}
// Call Armageddon Mode
remove_task(TASK_MAKEZOMBIE)
make_a_zombie(MODE_ARMAGEDDON, 0)
}
Y BUENO, CREO QUE NO ME OLVIDO DE NADA ! Si me falto algo diganmelo y lo arreglo ^^.
Y, un problema que me surgio con este modo (y eso que lo juge en lan contra los PodBot) es que me bajaban los fps a 5 de tanto glow y aura (tanto de nemesis como de survivor)
Como reducir el lag del modo armageddon
Primero busquemos por
nemglow, una vez lo encontremos, asegurarse de que editais que hay tras el else y no el que esta en el if (g_handle_models_on_separate_ent).
Y quedaria asi
PHP Code:
// Nemesis glow / remove glow, unless frozen
if (!g_frozen[id])
{
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow) && !g_armageddonround)
fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
else
fm_set_rendering(id)
}
Luego buscamos otra vez nemglow, y veremos algo asi
PHP Code:
// Restore rendering
if (g_handle_models_on_separate_ent)
Pues justo en el else
PHP Code:
// Restore rendering
if (g_handle_models_on_separate_ent) // ESTE NO SE TOCA, CACA!!
{
// Nemesis or Survivor glow / remove glow on player model entity
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow))
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
else if (g_survivor[id] && get_pcvar_num(cvar_survglow))
fm_set_rendering(g_ent_playermodel[id], kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
else
fm_set_rendering(g_ent_playermodel[id])
}
else // ESTE SI SE TOCA
{
// Nemesis or Survivor glow / remove glow
if (g_nemesis[id] && get_pcvar_num(cvar_nemglow) && !g_armageddonround)
fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
else if (g_survivor[id] && get_pcvar_num(cvar_survglow))
fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
else
fm_set_rendering(id)
}
Y para nuestra suerte, si lo volvemos a buscar, nos llevara al principio, asi que, ya acabamos con el glow del nemesis
Ahora el del survivor, lo mismo pero cambiando nemglow por survglow o.o
Ahora le quitaremos el aura al survivor
(Esto es muy facil, porque es una linea sola)
Y quedaria asi
PHP Code:
// Give the survivor a bright light
if (get_pcvar_num(cvar_survaura) && !g_armageddonround) set_pev(id, pev_effects, pev(id, pev_effects) | EF_BRIGHTLIGHT)
Y ahora, el razonamiento del millón. ¿Y como mierda ven los survivors si no tienen aura y no pueden usar la linterna !?!?
Fácil, editemos la parte de la linterna
Busquemos el public de
fw_CmdStart
Y veremos algo asi
PHP Code:
// Should human's custom flashlight be turned on?
if (!g_zombie[id] && !g_survivor[id] && g_flashbattery[id] > 2 && get_gametime() - g_lastflashtime[id] > 1.2)
Lo cual deberemos dejar asi
PHP Code:
// (g_survivor[id] && g_armageddonround) Esto quiere decir que si es survivor y ademas es ronda armageddon la podra usar. Si es survivor y NO es ronda armageddon, no podra :)
// Should human's custom flashlight be turned on?
if (!g_zombie[id] && (g_survivor[id] && g_armageddonround) && g_flashbattery[id] > 2 && get_gametime() - g_lastflashtime[id] > 1.2)
ET VOILÀ !
Saludos,
Javivi.