AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   set_task to repeat (https://forums.alliedmods.net/showthread.php?t=194622)

emaya93 08-29-2012 19:06

set_task to repeat
 
Hi,
I'm trying to make this plugin work corectly, and I dont know how to set the "set_task", to repeat every round that function. So I want, to countdown the time remaing in that cvar, in every new round begins. But I don't know how!.. This is the code

Code:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>

#define TIMER_TASK 123456

new g_counter 

new g_SyncRestartTimer

new Float:RoundStartTime

new g_Time_Interval;
const MAX_PLAYERS = 32;

new g_iRespawn[MAX_PLAYERS+1], g_TeamInfoCounter[MAX_PLAYERS+1], CsTeams:g_iPlayerTeam[MAX_PLAYERS+1];
new g_pCvarRespawnTime, g_pCvarRespawnDelay, g_pCvarMaxHealth;

public plugin_init()
{
    register_plugin("Dr.Respawn", "1.0", "Vicious Vixen");
    RegisterHam(Ham_Killed, "player", "fwdPlayerKilledPost", 1);
    RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", 1);
    register_event("TeamInfo", "eTeamInfo", "a");
    register_logevent( "LogEventRoundStart", 2, "1=Round_Start" )
    g_pCvarRespawnTime = register_cvar("amx_respawn_tickets", "0"); //Set to 0 for unlimited respawns
    g_pCvarRespawnDelay = register_cvar("amx_respawn_delay", "1");
    g_pCvarMaxHealth = register_cvar("amx_max_health", "100");
    g_Time_Interval = register_cvar("amx_max_time", "30");
    set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET ); 
    g_SyncRestartTimer = CreateHudSyncObj()
    set_task(1.0,"TimeCounter",TIMER_TASK,_,_,"a", get_pcvar_num(g_Time_Interval))
}

public LogEventRoundStart()
{
    RoundStartTime = get_gametime()
   
    new iPlayers[32]
    new iNum

    get_players( iPlayers, iNum )
   
    for( new i = 0; i < iNum; i++ )
    {
        g_iRespawn[iPlayers[i]] = true
    }
}

public TimeCounter()
{
    g_counter++
   
    new Float:iRestartTime = get_pcvar_float(g_Time_Interval) - g_counter
    new Float:fSec
    fSec = iRestartTime
   
    set_hudmessage( 0, 255, 255, -1.0, 0.25, 0, 0.0, 1.0, 0.0, 0.0, -1)
    ShowSyncHudMsg( 0, g_SyncRestartTimer, "Remained %d seconds to respawn", floatround(fSec))
   
    if( get_pcvar_num(g_Time_Interval) - g_counter < 11 )
    {
        static szNum[32]
        num_to_word(get_pcvar_num(g_Time_Interval) - g_counter, szNum, 31)
        client_cmd(0,"speak ^"vox/%s^"", szNum)
    }

}

public fwdPlayerKilledPost(iVictim, iKiller, iShoudlGib)
{
    if(g_iRespawn[iVictim]++ < get_pcvar_num(g_pCvarRespawnTime) || get_pcvar_num(g_pCvarRespawnTime) == 0)
    {
        set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer", iVictim);
    }
    return HAM_IGNORED;
}

public fwdPlayerSpawnPost(iClient)
{
    if(is_user_alive(iClient))
    {
        set_pev(iClient, pev_health, get_pcvar_float(g_pCvarMaxHealth));
    }
}

public taskRespawnPlayer(id)
{
    if(is_user_connected(id) && RoundStartTime + get_pcvar_num(g_Time_Interval) >= get_gametime() && g_iRespawn[id] && !is_user_alive(id) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
        ExecuteHamB(Ham_CS_RoundRespawn, id)
        g_iRespawn[id] = false
        return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;


public eTeamInfo()
{
    new iClient = read_data(1);
    new szTeam[2];
    read_data(2, szTeam, charsmax(szTeam));
    switch(szTeam[0])
    {
        case 'T':
        {
            if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
            {
                set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);
            }
            g_iPlayerTeam[iClient] = CS_TEAM_T;
        }
        case 'C':
        {
            if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
            {
                set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);
            }
            g_iPlayerTeam[iClient] = CS_TEAM_CT;
        }
        case 'S':
        {
            remove_task(iClient);
            g_iPlayerTeam[iClient] = CS_TEAM_SPECTATOR;
        }
    }

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{ rtf1 ansi ansicpg1252 deff0 deflang1033{ fonttbl{ f0 fnil Tahoma;}}n viewkind4 uc1 pard f0 fs16 n par }
*/


fysiks 08-29-2012 19:11

Re: set_task to repeat
 
If you want something to happen once every round you simply put the code in the function that executes once every round . . .

Bugsy 08-29-2012 19:21

Re: set_task to repeat
 
https://forums.alliedmods.net/showthread.php?t=42159

emaya93 08-30-2012 05:43

Re: set_task to repeat
 
I had trying, but it's shows me hud message, but does not coundown, it shows every round a number. Exemple: "Remaining 27 secunds" next round "Remaining 26 secunds" . I wand every round to countdown, the number in that cvar, I know that I'm rong somewere... if you cut tell me where? Please... This is the "new code"

Code:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>

new g_counter 

new g_SyncRestartTimer

new Float:RoundStartTime

new g_Time_Interval;
const MAX_PLAYERS = 32;

new g_iRespawn[MAX_PLAYERS+1], g_TeamInfoCounter[MAX_PLAYERS+1], CsTeams:g_iPlayerTeam[MAX_PLAYERS+1];
new g_pCvarRespawnTime, g_pCvarRespawnDelay, g_pCvarMaxHealth;

public plugin_init()
{
    register_plugin("Dr.Respawn", "1.0", "Vicious Vixen");
    RegisterHam(Ham_Killed, "player", "fwdPlayerKilledPost", 1);
    RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", 1);
    register_event("TeamInfo", "eTeamInfo", "a");
    register_logevent("logevent_round_start", 2, "1=Round_Start")
    register_logevent( "LogEventRound_End", 2, "1=Round_End" )
    g_pCvarRespawnTime = register_cvar("amx_respawn_tickets", "0"); //Set to 0 for unlimited respawns
    g_pCvarRespawnDelay = register_cvar("amx_respawn_delay", "1");
    g_pCvarMaxHealth = register_cvar("amx_max_health", "100");
    g_Time_Interval = register_cvar("amx_max_time", "30");
    set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET ); 
    g_SyncRestartTimer = CreateHudSyncObj()
}

public LogEventRoundStart()
{
    RoundStartTime = get_gametime()
   
    new iPlayers[32]
    new iNum
   
    get_players( iPlayers, iNum )
   
    for( new i = 0; i < iNum; i++ )
    {
        g_iRespawn[iPlayers[i]] = true
    }
   
}

public logevent_round_end()
{
    g_counter++
   
    new Float:iRestartTime = get_pcvar_float(g_Time_Interval) - g_counter
    new Float:fSec
    fSec = iRestartTime
   
    set_hudmessage( 0, 255, 255, -1.0, 0.25, 0, 0.0, 1.0, 0.0, 0.0, -1)
    ShowSyncHudMsg( 0, g_SyncRestartTimer, "Remained %d seconds to respawn", floatround(fSec))
   
    if( get_pcvar_num(g_Time_Interval) - g_counter < 11 )
    {
        static szNum[32]
        num_to_word(get_pcvar_num(g_Time_Interval) - g_counter, szNum, 31)
        client_cmd(0,"speak ^"vox/%s^"", szNum)
    }
   
}

public fwdPlayerKilledPost(iVictim, iKiller, iShoudlGib)
{
    if(g_iRespawn[iVictim]++ < get_pcvar_num(g_pCvarRespawnTime) || get_pcvar_num(g_pCvarRespawnTime) == 0)
    {
        set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer", iVictim);
    }
    return HAM_IGNORED;
}

public fwdPlayerSpawnPost(iClient)
{
    if(is_user_alive(iClient))
    {
        set_pev(iClient, pev_health, get_pcvar_float(g_pCvarMaxHealth));
    }
}

public taskRespawnPlayer(id)
{
    if(is_user_connected(id) && RoundStartTime + get_pcvar_num(g_Time_Interval) >= get_gametime() && g_iRespawn[id] && !is_user_alive(id) && cs_get_user_team(id) != CS_TEAM_SPECTATOR) {
        ExecuteHamB(Ham_CS_RoundRespawn, id)
        g_iRespawn[id] = false
        return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;


public eTeamInfo()
{
    new iClient = read_data(1);
    new szTeam[2];
    read_data(2, szTeam, charsmax(szTeam));
    switch(szTeam[0])
    {
        case 'T':
        {
            if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
            {
                set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);
            }
            g_iPlayerTeam[iClient] = CS_TEAM_T;
        }
        case 'C':
        {
            if(g_TeamInfoCounter[iClient] == 2 || g_iPlayerTeam[iClient] == CS_TEAM_SPECTATOR)
            {
                set_task(get_pcvar_float(g_pCvarRespawnDelay), "taskRespawnPlayer",  iClient);
            }
            g_iPlayerTeam[iClient] = CS_TEAM_CT;
        }
        case 'S':
        {
            remove_task(iClient);
            g_iPlayerTeam[iClient] = CS_TEAM_SPECTATOR;
        }
    }
}



All times are GMT -4. The time now is 05:53.

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