AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Zombie Plague Multi Mod Random Survivor Problems (https://forums.alliedmods.net/showthread.php?t=326013)

ZombieTheMan01 07-15-2020 06:11

Zombie Plague Multi Mod Random Survivor Problems
 
Now I have added mixed survivor to multi infection mode of this ZP 5.0.8. However, I encountered a problem like this. normally under 10 people, survivor is where it should come depending on the chance of percentage. The 80% guarantee comes to any. How do you think we can fix this situation?

PHP Code:


/*================================================================================
    
    ------------------------------------------
    -*- [ZP] Game Mode: Multiple Infection -*-
    ------------------------------------------
    
    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 <fakemeta>
#include <hamsandwich>
#include <amx_settings_api>
#include <cs_teams_api>
#include <cs_ham_bots_api>
#include <zp50_gamemodes>
#include <zp50_deathmatch>
#include <zp50_class_survivor>

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

// Default sounds
new const sound_multi[][] = { "ambience/the_horror2.wav" }

#define SOUND_MAX_LENGTH 64

new Array:g_sound_multi

// HUD messages
#define HUD_EVENT_X -1.0
#define HUD_EVENT_Y 0.17
#define HUD_EVENT_R 200
#define HUD_EVENT_G 50
#define HUD_EVENT_B 0

new g_MaxPlayers

new cvar_multi_chancecvar_multi_min_playerscvar_multi_min_zombies
new cvar_multi_ratio
new cvar_multi_allow_respawncvar_respawn_after_last_human
new cvar_multi_ratio_surv

public plugin_precache()
{
    
// Register game mode at precache (plugin gets paused after this)
    
register_plugin("[ZP] Game Mode: Multiple Infection"ZP_VERSION_STRING"ZP Dev Team")
    
zp_gamemodes_register("Multiple Infection Mode")
    
    
g_MaxPlayers get_maxplayers()
    
    
cvar_multi_chance register_cvar("zp_multi_chance""20")
    
cvar_multi_min_players register_cvar("zp_multi_min_players""0")
    
cvar_multi_min_zombies register_cvar("zp_multi_min_zombies""2")
    
cvar_multi_ratio register_cvar("zp_multi_ratio""0.15")
    
cvar_multi_ratio_surv register_cvar("zp_multi_ratio_survivor""0.1")
    
cvar_multi_allow_respawn register_cvar("zp_multi_allow_respawn""1")
    
cvar_respawn_after_last_human register_cvar("zp_respawn_after_last_human""1")
    
    
// Initialize arrays
    
g_sound_multi ArrayCreate(SOUND_MAX_LENGTH1)
    
    
// Load from external file
    
amx_load_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ROUND MULTI"g_sound_multi)
    
    
// If we couldn't load custom sounds from file, use and save default ones
    
new index
    
if (ArraySize(g_sound_multi) == 0)
    {
        for (
index 0index sizeof sound_multiindex++)
            
ArrayPushString(g_sound_multisound_multi[index])
        
        
// Save to external file
        
amx_save_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ROUND MULTI"g_sound_multi)
    }
    
    
// Precache sounds
    
new sound[SOUND_MAX_LENGTH]
    for (
index 0index ArraySize(g_sound_multi); index++)
    {
        
ArrayGetString(g_sound_multiindexsoundcharsmax(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_multi_allow_respawn))
        return 
PLUGIN_HANDLED;
    
    
// Respawn if only the last human is left?
    
if (!get_pcvar_num(cvar_respawn_after_last_human) && zp_core_get_human_count() == 1)
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}

public 
zp_fw_gamemodes_choose_pre(game_mode_idskipchecks)
{
    new 
alive_count GetAliveCount()
    
    
// Calculate zombie count with current ratio setting
    
new zombie_count floatround(alive_count get_pcvar_float(cvar_multi_ratio), floatround_ceil)
    new 
survivor_count floatround(alive_count get_pcvar_float(cvar_multi_ratio_surv), floatround_ceil)
    if (!
skipchecks)
    {
        new 
id
        
if(zp_class_survivor_get(id))
        {
            if (
alive_count 10)
            {
                if (
random_num(180) != 43)
                    return 
PLUGIN_HANDLED;
            }
            
//return PLUGIN_HANDLED;
            /*if (alive_count < 6)
            {
                if (random_num(1, 120) != 43)
                    return PLUGIN_HANDLED;
            }*/
            // Min zombies
            
if (survivor_count 5)
                return 
PLUGIN_HANDLED;
        }
        else {
        
// Random chance
            
if (random_num(1get_pcvar_num(cvar_multi_chance)) != 1)
                return 
PLUGIN_HANDLED;
            
            
// Min players
            
if (alive_count get_pcvar_num(cvar_multi_min_players))
                return 
PLUGIN_HANDLED;
            
            
// Min zombies
            
if (zombie_count get_pcvar_num(cvar_multi_min_zombies))
                return 
PLUGIN_HANDLED;
        }
    }
    
    
// Zombie count should be smaller than alive players count, so that there's humans left in the round
    
if (zombie_count >= alive_count)
        return 
PLUGIN_HANDLED;
    if (
survivor_count >= alive_count)
        return 
PLUGIN_HANDLED;
        
    
// Game mode allowed
    
return PLUGIN_CONTINUE;
}

public 
zp_fw_gamemodes_start()
{
    
// Allow infection for this game mode
    
zp_gamemodes_set_allow_infect()
    
    
// iMaxZombies is rounded up, in case there aren't enough players
    
new iZombiesidalive_count GetAliveCount()
    new 
iSurvivors
    
new iMaxZombies floatround(alive_count get_pcvar_float(cvar_multi_ratio), floatround_ceil)
    new 
iMaxSurvivors floatround(alive_count get_pcvar_float(cvar_multi_ratio_surv), floatround_ceil)
    
    
// Randomly turn iMaxZombies players into zombies
    
while (iSurvivors iMaxSurvivors)
    {
        
// Choose random guy
        
id GetRandomAlive(random_num(1alive_count))
        
        
// Dead or already a zombie
        
if (zp_class_survivor_get(id))
            continue;
        
        
// Turn into a zombie
        
zp_class_survivor_set(id)
        
iSurvivors++
    }
    while (
iZombies iMaxZombies)
    {
        
// Choose random guy
        
id GetRandomAlive(random_num(1alive_count))
        
        
// Dead or already a zombie
        
if (!is_user_alive(id) || zp_core_is_zombie(id))
            continue;
        
        
// Turn into a zombie
        
zp_core_infect(id0)
        
iZombies++
    }
    
    
    
// Turn the remaining players into humans
    
for (id 1id <= g_MaxPlayersid++)
    {
        
// Only those of them who aren't zombies
        
if (!is_user_alive(id) || zp_core_is_zombie(id))
            continue;
        
        
// Switch to CT
        
cs_set_player_team(idCS_TEAM_CT)
    }
    
    
// Play multi infection sound
    
    
new sound[SOUND_MAX_LENGTH]
    
ArrayGetString(g_sound_multirandom_num(0ArraySize(g_sound_multi) - 1), soundcharsmax(sound))
    
PlaySoundToClients(sound)

}

// 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;




All times are GMT -4. The time now is 13:49.

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