AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Detect if player is not IT (https://forums.alliedmods.net/showthread.php?t=113871)

benamo6 12-30-2009 20:50

Detect if player is not IT
 
I want to know how to detect if player is not "IT" in Tag Mod by GHW.
And when "IT" player become normal. In this mod there are 4 minimods, In one called "Regular" (One player is "IT" then tags another player who then becomes the new "IT") I need to detect the part of the code that makes "IT" player a normal player to change his speed to normal, because I added speed for "IT".

http://forums.alliedmods.net/showthread.php?t=16994

To detect if player is not "IT" I've tought in somthing like this, but it_player == 0 isn't working.

PHP Code:

public money_nonit(id)
{
    if(
is_user_alive(id) && it_player == 0)
    {
        
cs_set_user_money(idcs_get_user_money(id) + 1000)
    }


The original code:
PHP Code:

/*
*   _______     _      _  __          __
*  | _____/    | |    | | \ \   __   / /
*  | |         | |    | |  | | /  \ | |
*  | |         | |____| |  | |/ __ \| |
*  | |   ___   | ______ |  |   /  \   |
*  | |  |_  |  | |    | |  |  /    \  |
*  | |    | |  | |    | |  | |      | |
*  | |____| |  | |    | |  | |      | |
*  |_______/   |_|    |_|  \_/      \_/
*
*
*
*  Last Edited: 07-12-09
*
*  ============
*   Changelog:
*  ============
*
*  v2.3
*    -Bug Fixes
*
*  v2.2
*    -Added ML
*
*  v2.1
*    -Added rules
*
*  v2.0
*    -Rewrite
*
*  v1.1
*    -Made less laggy and more compadible (by taking out client_PreThink)
*
*  v1.0
*    -Initial Release
*
*/

#define VERSION    "2.3b"

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <fakemeta>

#define TAG_BASE_DISTANCE    150

#define TASK_SELECT_IT        1335
#define TASK_CREATE_BASE    1336
#define TASK_REDRAW_BASE    1337

enum MODE
{
    
OFF,
    
REGULAR,
    
FREEZE,
    
BASE,
    
TEAM
}

new 
MODE:game_mode
new it_player
new old_it
new immune_player
new maxplayers

new individual_msg_pcvar
new restart_pcvar
new activity_pcvar

new bool:frozen[33]
new 
bool:defrostable[33]
new 
bool:respawning[33]
new 
bool:tagged[33]
new 
bool:gottobase[33]

new 
Float:base_origin[3]
new 
base_origin_I[3]

new 
beamsprite

public plugin_init()
{
    
register_plugin("Tag Mod",VERSION,"GHW_Chronic")

    
register_concmd("amx_tag","cmd_start",ADMIN_SLAY," Starts a game of tag [Normal, Freeze, Base, Team]")
    
register_concmd("amx_tag_off","cmd_stop",ADMIN_SLAY," Stops a currently running game of tag")

    
register_forward(FM_Touch,"FM_Touch_Hook")
    
register_forward(FM_PlayerPreThink,"FM_Think_Hook")
    
register_event("ResetHUD","ResetHUD_Hook","b")

    
register_cvar("tag_mode","0")
    
individual_msg_pcvar register_cvar("tag_individual_msg","0")
    
restart_pcvar get_cvar_pointer("sv_restart")
    
activity_pcvar get_cvar_pointer("amx_show_activity")

    
maxplayers get_maxplayers()

    if(
get_cvar_num("tag_mode"))
    {
        switch(
get_cvar_num("tag_mode"))
        {
            case 
1:
            {
                
game_mode REGULAR
            
}
            case 
2:
            {
                
game_mode FREEZE
            
}
            case 
3:
            {
                
game_mode BASE
            
}
            case 
4:
            {
                
game_mode TEAM
            
}
        }

        
reset_game()

        new 
players[32], num
        get_players
(players,num,"h")
        for(new 
i=0;i<num;i++)
        {
            
set_pev(players[i],pev_takedamage,0.0)
            
frozen[players[i]] = false
        
}

        
select_it()
    }

    
register_dictionary("GHW_TagMod.txt")
}

public 
plugin_precache()
{
    
beamsprite precache_model("sprites/dot.spr")
}

public 
client_connect(id)
{
    
frozen[id] = false
    respawning
[id] = false
    tagged
[id] = false
    gottobase
[id] = false
}

public 
client_disconnect(id)
{
    if(
id==it_player)
    {
        
select_it()
    }
}

public 
cmd_start(id,level,cid)
{
    if(!
cmd_access(id,level,cid,1))
    {
        return 
PLUGIN_HANDLED
    
}

    
game_mode REGULAR

    
if(read_argc()>1)
    {
        new 
arg[32]
        
read_argv(1,arg,31)
        if(
equali(arg,"Freeze"))
        {
            
game_mode FREEZE
        
}
        else if(
equali(arg,"Base"))
        {
            
game_mode BASE
        
}
        else if(
equali(arg,"Team"))
        {
            
game_mode TEAM
        
}
    }

    new 
name[32]
    if(
get_pcvar_num(activity_pcvar)>1)
    {
        
format(name,31,"Admin")
    }
    else
    {
        
get_user_name(id,name,31)
    }

    new 
type[32]
    new 
rules[128]
    switch(
game_mode)
    {
        case 
REGULAR:
        {
            
format(type,31,"%L",0,"TAG_TYPE_REGULAR")
            
format(rules,127,"[AMXX] %L",0,"TAG_RULES_REGULAR")
        }
        case 
FREEZE:
        {
            
format(type,31,"%L",0,"TAG_TYPE_FREEZE")
            
format(rules,127,"[AMXX] %L",0,"TAG_RULES_FREEZE")
        }
        case 
BASE:
        {
            
format(type,31,"%L",0,"TAG_TYPE_BASE")
            
format(rules,127,"[AMXX] %L",0,"TAG_RULES_BASE")
        }
        case 
TEAM:
        {
            
format(type,31,"%L",0,"TAG_TYPE_TEAM")
            
format(rules,127,"[AMXX] %L",0,"TAG_RULES_TEAM")
        }
    }

    
reset_game()

    
set_pcvar_num(restart_pcvar,1)

    new 
players[32], num
    get_players
(players,num,"h")
    for(new 
i=0;i<num;i++)
    {
        
set_pev(players[i],pev_takedamage,0.0)
        
frozen[players[i]] = false
    
}

    
console_print(id,"[AMXX] %L",id,"TAG_GAME_STARTED_CON",type)
    
client_print(0,print_chat,"[AMXX] %L",0,"TAG_GAME_STARTED_CHAT",name,type)
    
client_print(0,print_chat,"%s",rules)

    
select_it()

    return 
PLUGIN_HANDLED
}

public 
Create_Base()
{
    if(
game_mode==BASE)
    {
        if(
it_player && is_user_alive(it_player))
        {
            
pev(it_player,pev_origin,base_origin)
            
FVecIVec(base_origin,base_origin_I)
            
set_task(2.0,"Redraw_Base")
            
set_task(30.0,"Redraw_Base",TASK_REDRAW_BASE,"",0,"b")
            
remove_task(TASK_CREATE_BASE)
        }
    }
    else
    {
        
remove_task(TASK_CREATE_BASE)
    }
}

public 
Redraw_Base()
{
    if(
game_mode!=BASE)
    {
        
remove_task(TASK_REDRAW_BASE)
    }

    
draw_sprite(100,100,100,-100)
    
draw_sprite(100,100,-100,100)
    
draw_sprite(100,-100,-100,-100)
    
draw_sprite(-100,100,-100,-100)
}

public 
draw_sprite(addx1,addy1,addx2,addy2)
{
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY
    
write_byte(0)        //TE_BEAMPOINTS
    
write_coord(base_origin_I[0] + addx1)
    
write_coord(base_origin_I[1] + addy1)
    
write_coord(base_origin_I[2])
    
write_coord(base_origin_I[0] + addx2)
    
write_coord(base_origin_I[1] + addy2)
    
write_coord(base_origin_I[2])
    
write_short(beamsprite)
    
write_byte(1)    // framestart
    
write_byte(1)    // framerate
    
write_byte(1200)    // life in 0.1's
    
write_byte(5)    // width
    
write_byte(0)    // noise
    
write_byte(random_num(0,255))
    
write_byte(random_num(0,255))
    
write_byte(random_num(0,255))
    
write_byte(200)    // brightness
    
write_byte(0)    // speed
    
message_end()
}

public 
reset_game()
{
    for(new 
i=1;i<=maxplayers;i++)
    {
        if(
is_user_connected(i))
        {
            
set_user_noclip(i)
            
_set_rendering(i)
        }
        
frozen[i] = false
        tagged
[i] = false
    
}
}

public 
reset_game2()
{
    for(new 
i=1;i<=maxplayers;i++)
    {
        
gottobase[i] = false
    
}
}

public 
select_it()
{
    if(
task_exists(TASK_SELECT_IT) && it_player && is_user_connected(it_player))
    {
        
remove_task(TASK_SELECT_IT)
    }
    else if(!
task_exists(TASK_SELECT_IT))
    {
        
old_it is_user_connected(it_player) ? it_player 0
        it_player 
0
        set_task
(5.0,"select_it",TASK_SELECT_IT,"",0,"b")
    }
    else
    {
        
select_it2()
    }
}

public 
select_it2()
{
    if(
it_player && is_user_connected(it_player))
        
_set_rendering(it_player)

    
it_player 0

    
new numplayers[32]
    
get_players(players,num,"h")

    if(
num)
    {
        new 
tries 100
        
new tempplayer
        
while(!it_player && tries--)
        {
            
tempplayer random_num(0,num 1)
            if(
tempplayer!=old_it && (game_mode!=BASE || !gottobase[players[tempplayer]]))
            {
                
it_player tempplayer
            
}
        }
        if(!
it_player)
            
it_player players[random_num(0,num 1)]

        if(
is_user_connected(it_player))
        {
            
_set_rendering(it_player,kRenderFxDistort,255,0,0,kRenderTransAdd,127)
    
            new 
name[32]
            
get_user_name(it_player,name,31)
            
client_print(0,print_chat,"[AMXX] %L",0,"TAG_IT_SELECTED",name)

            if(
it_player && game_mode==BASE)
            {
                
reset_game2()
                if(!
task_exists(TASK_CREATE_BASE))
                {
                    
set_task(10.0,"Create_Base",TASK_CREATE_BASE,"",0,"b")
                }
            }
        }
        else
        {
            
select_it2() /////////
            
it_player 0
        
}
    }
}

public 
ResetHUD_Hook(id)
{
    if(
game_mode && pev_valid(id) && pev(id,pev_takedamage))
        
set_pev(id,pev_takedamage,0.0)
}

public 
cmd_stop(id,level,cid)
{
    if(!
cmd_access(id,level,cid,1))
    {
        return 
PLUGIN_HANDLED
    
}

    if(
game_mode)
    {
        
game_mode OFF

        
new players[32], num
        get_players
(players,num,"h")
        for(new 
i=0;i<num;i++)
        {
            
_set_rendering(players[i])
            
set_pev(players[i],pev_takedamage,1.0)
            
set_user_noclip(players[i])
        }

        new 
name[32]
        if(
get_pcvar_num(activity_pcvar)>1)
        {
            
format(name,31,"Admin")
        }
        else
        {
            
get_user_name(id,name,31)
        }
        
console_print(id,"[AMXX] %L",id,"TAG_GAME_STOPPED_CON")
        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_GAME_STOPPED_CHAT",name)
    }
    else
    {
        
console_print(id,"[AMXX] %L",id,"TAG_GAME_NOTRUNNING")
    }

    return 
PLUGIN_HANDLED
}

public 
respawn_player(id)
{
    if(
is_user_connected(id))
    {
        
//Make the engine think he is spawning
        
set_pev(id,pev_deadflag,DEAD_RESPAWNABLE)
        
set_pev(id,pev_iuser1,0)
        
dllfunc(DLLFunc_Think,id)

        
//Move his body so if corpse is created it is not in map
        
engfunc(EngFunc_SetOrigin,id,Float:{-4800.0,-4800.0,-4800.0})

        
//Actual Spawn
        
set_task(0.5,"spawnagain",id)
    }
}

public 
spawnagain(id)
{
    
//Make sure he didn't disconnect in the 0.5 seconds that have passed.
    
if(is_user_connected(id))
    {
        
//Spawn player
        
spawn(id)
        
dllfunc(DLLFunc_Spawn,id)

        
set_task(0.2,"spawned",id)
    }
}

public 
spawned(id)
{
    if(
is_user_connected(id))
    {
        if(
id==it_player)
        {
            
_set_rendering(id,kRenderFxDistort,255,0,0,kRenderTransAdd,127)
        }
        else if(
game_mode==BASE)
        {
            if(
tagged[id])
            {
                
_set_rendering(id,kRenderFxGlowShell,0,255,0,kRenderTransAlpha,70)
                
set_user_noclip(id,1)
            }
            else if(
gottobase[id])
            {
                
_set_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAdd,0)
                
engfunc(EngFunc_SetView,id,it_player)
            }
        }
        else if(
game_mode==FREEZE && frozen[id])
        {
            
_set_rendering(id,kRenderFxGlowShell,0,0,255,kRenderTransAlpha,70)
        }
    
        
set_pev(id,pev_takedamage,0.0)
        
respawning[id] = false
    
        
if(!it_player)
        {
            
select_it()
        }
    }
}

public 
FM_Think_Hook(ent)
{
    if(!
game_mode || ent maxplayers)
        return 
PLUGIN_CONTINUE

    
if(!respawning[ent] && !is_user_alive(ent) && get_user_team(ent))
    {
        
respawning[ent] = true
        respawn_player
(ent)
    }

    if(
frozen[ent])
    {
        
set_pev(ent,pev_velocity,Float:{0.0,0.0,-100.0})
    }

    if(
ent!=it_player && !tagged[ent] && !gottobase[ent] && is_user_alive(ent) && game_mode==BASE)
    {
        static 
Float:origin[3]
        
pev(ent,pev_origin,origin)
        if(
get_distance_f(origin,base_origin)<TAG_BASE_DISTANCE)
        {
            
gottobase[ent] = true
            frozen
[ent] = true
            set_user_noclip
(ent,1)
            
_set_rendering(ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,0)

            if(
get_pcvar_num(individual_msg_pcvar))
            {
                static 
name[32]
                
get_user_name(ent,name,31)
                
client_print(ent,print_chat,"[AMXX] %L",ent,"TAG_GOTTOBASE_CLIENT")
                
                if(
get_pcvar_num(individual_msg_pcvar))
                {
                    
client_print(0,print_chat,"[AMXX] %L",0,"TAG_GOTTOBASE_ALL",name)
                }

                if(
allout())
                {
                    
client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")

                    
reset_game()
                    
select_it()
                    
reset_game2()
                }
            }
        }
    }

    return 
PLUGIN_CONTINUE
}

public 
FM_Touch_Hook(ent1,ent2)
{
    static 
name[32]
    if(
ent1 <= maxplayers && is_user_alive(ent1) && ent2 <= maxplayers && is_user_alive(ent1) && is_user_alive(ent2))
    {
        switch(
game_mode)
        {
            case 
REGULAR:
            {
                if(
ent1==it_player && ent2!=immune_player)
                {
                    if(
frozen[it_player])
                        
frozen[it_player] = false

                    immune_player 
it_player
                    set_task
(5.0,"unimmune")
                    
frozen[ent2] = true
                    set_task
(5.0,"unfreeze",ent2)
                    
it_player ent2

                    get_user_name
(ent2,name,31)
                    
client_print(0,print_chat,"[AMXX] %L",0,"TAG_TAGGED",name)

                    
_set_rendering(ent1)
                    
_set_rendering(ent2,kRenderFxDistort,0,0,0,kRenderTransAdd,127)
                }
            }
            case 
FREEZE:
            {
                if(
defrostable[ent1] && frozen[ent1] && ent2!=it_player && !frozen[ent2])
                {
                    
unfreeze(ent1)
                    
_set_rendering(ent1)

                    if(
get_pcvar_num(individual_msg_pcvar))
                    {
                        
get_user_name(ent1,name,31)
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_UNFROZEN",name)
                    }
                }
                else if(
ent1==it_player && !frozen[ent2])
                {
                    
freeze(ent2)
                    
_set_rendering(ent2,kRenderFxGlowShell,0,0,255,kRenderTransAlpha,70)

                    if(
get_pcvar_num(individual_msg_pcvar))
                    {
                        
get_user_name(ent2,name,31)
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_FROZEN",name)
                    }

                    
defrostable[ent2] = false
                    set_task
(1.0,"unfreezeable",ent2)

                    if(
allfrozen())
                    {
                        
set_pcvar_num(restart_pcvar,1)

                        
get_user_name(it_player,name,31)
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_FROZEN_FINISHED",name)

                        
reset_game()
                        
select_it()
                    }
                }
            }
            case 
BASE:
            {
                if(
ent1==it_player && !tagged[ent2] && !gottobase[ent2])
                {
                    
tagged[ent2] = true;
                    
_set_rendering(ent2,kRenderFxGlowShell,0,255,0,kRenderTransAlpha,70)
                    
set_user_noclip(ent2,1)

                    if(
get_pcvar_num(individual_msg_pcvar))
                    {
                        
get_user_name(ent2,name,31)
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_BASE_TAGGED",name)
                    }

                    if(
allout())
                    {
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")

                        
reset_game()
                        
select_it()
                    }
                }
            }
            case 
TEAM:
            {
                if((
ent1==it_player || tagged[ent1]) && (!tagged[ent2] && ent2!=it_player))
                {
                    
client_print(ent2,print_chat,"[AMXX] %L",ent2,"TAG_TEAM_TAGGED")
                    
tagged[ent2] = true
                    _set_rendering
(ent2,kRenderFxDistort,0,0,0,kRenderTransAdd,127)
                    if(
alltagged())
                    {
                        
client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")

                        
reset_game()
                        
select_it()
                    }
                }
            }
        }
    }
}

public 
allfrozen()
{
    new 
numplayers[32]
    
get_players(players,num,"ah")

    for(new 
i=0;i<num;i++)
    {
        if(
players[i]!=it_player && !frozen[players[i]])
            return 
0;
    }

    return 
1;
}

public 
allout()
{
    new 
numplayers[32]
    
get_players(players,num,"ah")

    for(new 
i=0;i<num;i++)
    {
        if(
players[i]!=it_player && !tagged[players[i]] && !gottobase[players[i]])
            return 
0;
    }

    return 
1;
}

public 
alltagged()
{
    new 
numplayers[32]
    
get_players(players,num,"ah")

    for(new 
i=0;i<num;i++)
    {
        if(
players[i]!=it_player && !tagged[players[i]])
            return 
0;
    }

    return 
1;
}

public 
unfreezeable(id)
{
    
defrostable[id] = true
}

public 
freeze(id)
{
    
frozen[id] = true
}

public 
unfreeze(id)
{
    
frozen[id] = false
}

public 
unimmune()
{
    
immune_player 0
}

// Taken from csdm_protection.sma by BAILOPAN.
stock _set_rendering(indexfx=kRenderFxNoner=255g=255b=255render=kRenderNormalamount=16)
{
    
set_pev(indexpev_renderfxfx);
    new 
Float:RenderColor[3];
    
RenderColor[0] = float(r);
    
RenderColor[1] = float(g);
    
RenderColor[2] = float(b);
    
set_pev(indexpev_rendercolorRenderColor);
    
set_pev(indexpev_rendermoderender);
    
set_pev(indexpev_renderamtfloat(amount));

    return 
1;



fysiks 12-30-2009 21:03

Re: Detect if player is not IT
 
PHP Code:

if( it_player == id)
{
    
// id is IT
}
else
{
    
// id is not IT



benamo6 12-30-2009 21:14

Re: Detect if player is not IT
 
Im going to test it.
Please try to locate the place where "IT" player become normal player in regular mod. I really need this to fix a bug.

EDIT: Worked perfectly thank you very much


All times are GMT -4. The time now is 04:12.

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