Raised This Month: $51 Target: $400
 12% 

[Req] How can I make the nemesis mode start in the last round? [ZP 5.0]


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Colombinus
Junior Member
Join Date: Nov 2020
Old 05-14-2022 , 02:15   [Req] How can I make the nemesis mode start in the last round? [ZP 5.0]
Reply With Quote #1

as the title says
How can I make nemesis mode only start on the last round automatically?
PHP Code:
/*================================================================================
    
    -------------------------------
    -*- [ZP] Game Mode: Nemesis -*-
    -------------------------------
    
    This plugin is part of Zombie Plague Mod and is distributed under the
    terms of the GNU General Public License. Check ZP_ReadMe.txt for details.
    
================================================================================*/

#include <amxmodx>
#include <amx_settings_api>
#include <cs_teams_api>
#include <zp50_gamemodes>
#include <zp50_class_nemesis>
#include <zp50_deathmatch>

// Settings file
new const ZP_SETTINGS_FILE[] = "zombieplague.ini"

// Default sounds
new const sound_nemesis[][] = { "zombie_plague/nemesis1.wav" "zombie_plague/nemesis2.wav" }

#define SOUND_MAX_LENGTH 64

new Array:g_sound_nemesis

// HUD messages
#define HUD_EVENT_X -1.0
#define HUD_EVENT_Y 0.17
#define HUD_EVENT_R 255
#define HUD_EVENT_G 20
#define HUD_EVENT_B 20

new g_MaxPlayers
new g_HudSync
new g_TargetPlayer

new cvar_nemesis_chancecvar_nemesis_min_players
new cvar_nemesis_show_hudcvar_nemesis_sounds
new cvar_nemesis_allow_respawn

public plugin_precache()
{
    
// Register game mode at precache (plugin gets paused after this)
    
register_plugin("[ZP] Game Mode: Nemesis"ZP_VERSION_STRING"ZP Dev Team")
    
zp_gamemodes_register("Nemesis Mode")
    
set_task1.0"NPC"___"d" );
    
    
// Create the HUD Sync Objects
    
g_HudSync CreateHudSyncObj()
    
    
g_MaxPlayers get_maxplayers()
    
    
cvar_nemesis_chance register_cvar("zp_nemesis_chance""20")
    
cvar_nemesis_min_players register_cvar("zp_nemesis_min_players""0")
    
cvar_nemesis_show_hud register_cvar("zp_nemesis_show_hud""1")
    
cvar_nemesis_sounds register_cvar("zp_nemesis_sounds""1")
    
cvar_nemesis_allow_respawn register_cvar("zp_nemesis_allow_respawn""0")
    
    
// Initialize arrays
    
g_sound_nemesis ArrayCreate(SOUND_MAX_LENGTH1)
    
    
// Load from external file
    
amx_load_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ROUND NEMESIS"g_sound_nemesis)
    
    
// If we couldn't load custom sounds from file, use and save default ones
    
new index
    
if (ArraySize(g_sound_nemesis) == 0)
    {
        for (
index 0index sizeof sound_nemesisindex++)
            
ArrayPushString(g_sound_nemesissound_nemesis[index])
        
        
// Save to external file
        
amx_save_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ROUND NEMESIS"g_sound_nemesis)
    }
    
    
// Precache sounds
    
new sound[SOUND_MAX_LENGTH]
    for (
index 0index ArraySize(g_sound_nemesis); index++)
    {
        
ArrayGetString(g_sound_nemesisindexsoundcharsmax(sound))
        if (
equal(sound[strlen(sound)-4], ".mp3"))
        {
            
format(soundcharsmax(sound), "sound/%s"sound)
            
precache_generic(sound)
        }
        else
            
precache_sound(sound)
    }
}

// Deathmatch module's player respawn forward
public zp_fw_deathmatch_respawn_pre(id)
{
    
// Respawning allowed?
    
if (!get_pcvar_num(cvar_nemesis_allow_respawn))
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}

public 
zp_fw_core_spawn_post(id)
{
    
// Always respawn as human on nemesis rounds
    
zp_core_respawn_as_zombie(idfalse)
}

public 
zp_fw_gamemodes_choose_pre(game_mode_idskipchecks)
{
    if (!
skipchecks)
    {
        
// Random chance
        
if (random_num(1get_pcvar_num(cvar_nemesis_chance)) != 1)
            return 
PLUGIN_HANDLED;
        
        
// Min players
        
if (GetAliveCount() < get_pcvar_num(cvar_nemesis_min_players))
            return 
PLUGIN_HANDLED;
    }
    
    
// Game mode allowed
    
return PLUGIN_CONTINUE;
}

public 
zp_fw_gamemodes_choose_post(game_mode_idtarget_player)
{
    
// Pick player randomly?
    
g_TargetPlayer = (target_player == RANDOM_TARGET_PLAYER) ? GetRandomAlive(random_num(1GetAliveCount())) : target_player
}

public 
zp_fw_gamemodes_start()
{
    
// Turn player into nemesis
    
zp_class_nemesis_set(g_TargetPlayer)
    
    
// Remaining players should be humans (CTs)
    
new id
    
for (id 1id <= g_MaxPlayersid++)
    {
        
// Not alive
        
if (!is_user_alive(id))
            continue;
        
        
// This is our Nemesis
        
if (zp_class_nemesis_get(id))
            continue;
        
        
// Switch to CT
        
cs_set_player_team(idCS_TEAM_CT)
    }
    
    
// Play Nemesis sound
    
if (get_pcvar_num(cvar_nemesis_sounds))
    {
        new 
sound[SOUND_MAX_LENGTH]
        
ArrayGetString(g_sound_nemesisrandom_num(0ArraySize(g_sound_nemesis) - 1), soundcharsmax(sound))
        
PlaySoundToClients(sound)
    }
    
    if (
get_pcvar_num(cvar_nemesis_show_hud))
    {
        
// Show Nemesis HUD notice
        
new name[32]
        
get_user_name(g_TargetPlayernamecharsmax(name))
        
set_hudmessage(HUD_EVENT_RHUD_EVENT_GHUD_EVENT_BHUD_EVENT_XHUD_EVENT_Y10.05.01.01.0, -1)
        
ShowSyncHudMsg(0g_HudSync"%L"LANG_PLAYER"NOTICE_NEMESIS"name)
    }
}

// Plays a sound on clients
PlaySoundToClients(const sound[])
{
    if (
equal(sound[strlen(sound)-4], ".mp3"))
        
client_cmd(0"mp3 play ^"sound/%s^""sound)
    else
        
client_cmd(0"spk ^"%s^""sound)
}

// Get Alive Count -returns alive players number-
GetAliveCount()
{
    new 
iAliveid
    
    
for (id 1id <= g_MaxPlayersid++)
    {
        if (
is_user_alive(id))
            
iAlive++
    }
    
    return 
iAlive;
}

// Get Random Alive -returns index of alive player number target_index -
GetRandomAlive(target_index)
{
    new 
iAliveid
    
    
for (id 1id <= g_MaxPlayersid++)
    {
        if (
is_user_alive(id))
            
iAlive++
        
        if (
iAlive == target_index)
            return 
id;
    }
    
    return -
1;

I appreciate your help in advance
Colombinus is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:54.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode