Raised This Month: $ Target: $400
 0% 

Finding Players near Player


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Juri
Junior Member
Join Date: Apr 2011
Old 04-01-2011 , 18:13   Finding Players near Player
Reply With Quote #1

Hello. I want to make Mod like Quake 3 Freeze TDM, and I need to find Players near freezed Player. I think about find_sphere_class, but i dont know how to use this with Player and finding other player near him. I want to find number of players and if players are being 7 seconds near freezed Player i want to make something with freezed Player(unfreeze Player).

Any Solutions for this ?
Juri is offline
hornet
AMX Mod X Plugin Approver
Join Date: Mar 2010
Location: Australia
Old 04-01-2011 , 22:54   Re: Finding Players near Player
Reply With Quote #2

Well you could try something like this, where check() is simply your function which is called everytime your going to check for players, whether it be in PreThink or a task you set every second or so:

PHP Code:
public checkid )
{
    new 
num, list[ 32 ], Float:dist 1000.0;
    
num find_sphere_classid"player"dist, list, 32 );
    
    new 
player;
    for ( new 
num i++ )
    {        
        
player = list[ ];
        if( !
is_user_aliveplayer ) || get_user_teamplayer ) != get_user_teamid ) )
            continue;
            
        
//unfreeze player
    
}

EDIT: Can only players only unfreeze a team mate?

Last edited by hornet; 04-02-2011 at 12:16.
hornet is offline
Juri
Junior Member
Join Date: Apr 2011
Old 04-02-2011 , 05:06   Re: Finding Players near Player
Reply With Quote #3

Yes, ofcorse only team mate can unfreeze player.

How to make timer when player unfreeze when plaeyers are near him ?

And how work dist? Any number 1 or 300 it's unfreeze from every distance on map ^^

Last edited by Juri; 04-02-2011 at 05:44.
Juri is offline
Exolent[jNr]
Veteran Member
Join Date: Feb 2007
Location: Tennessee
Old 04-02-2011 , 05:48   Re: Finding Players near Player
Reply With Quote #4

Use PreThink for the frozen player and check if the number of teammates around him for 7 seconds.
__________________
No private work or selling mods.
Quote:
Originally Posted by xPaw View Post
I love you exolent!
Exolent[jNr] is offline
Juri
Junior Member
Join Date: Apr 2011
Old 04-02-2011 , 06:14   Re: Finding Players near Player
Reply With Quote #5

Quote:
Originally Posted by Exolent[jNr] View Post
check if the number of teammates around him for 7 seconds.
But how ? And why distance dont work ? If I put 1 or 1000 it's unfreeze from any distance -.-

HTML Code:
public check( id )
{
    new num, list[ 32 ], Float:dist = 250.0;
    num = find_sphere_class( id, "player", dist+0.0, list, 32 );
    
    new player;
    for ( new i ; i < num ; i++ )
    {        
        player = list[ i ];
        if( !is_user_alive( player ) || get_user_team( player ) != get_user_team( id ) || gfFrost[id] == 0 )
        {
            continue;
        }
        set_task(5.0,"odmroz",id)
    }
}

public odmroz(id)
{
    gfFrost[id]=0;
    set_user_health(id,100);
    set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
    set_pev(id, pev_maxspeed, 250.0) 
}
Juri is offline
hornet
AMX Mod X Plugin Approver
Join Date: Mar 2010
Location: Australia
Old 04-02-2011 , 12:25   Re: Finding Players near Player
Reply With Quote #6

Try that... and then obviously you'll reset their frost variable to false on every new round.
PHP Code:
new bool:gbFrost33 ];

public 
checkid )
{
    if( !
gbFrostid ] )
    return 
PLUGIN_HANDLED;
    
    new 
num, list[ 32 ], Float:dist 250.0;
    
num find_sphere_classid"player"dist, list, 32 );
    
    new 
player;
    for ( new 
num i++ )
    {        
        
player = list[ ];
        if( !
is_user_aliveplayer ) || get_user_teamplayer ) != get_user_teamid ) || gbFrostplayer ] )
            continue;
        
         
set_task5.0"odmroz"id );
    }
}  

public 
odmrozid )
{
    
gbFrostid ] = false;
    
set_user_healthid100 );
    
set_user_renderingidkRenderFxNone000kRenderNormal);
    
set_pevidpev_maxspeed250.0 ) ;


Last edited by hornet; 04-02-2011 at 12:34.
hornet is offline
Juri
Junior Member
Join Date: Apr 2011
Old 04-02-2011 , 14:26   Re: Finding Players near Player
Reply With Quote #7

Hmmm still nothing. It's freeze for few seconds and unfreeze when i'm and only 1 enemy is ! What is wrong ?

PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>
#include <fun>
#include <cstrike>
#include <amxmisc>
#include <engine>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "DarkGL"

#define MAX 32


new bool:gfFrost33 ];

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
RegisterHam(Ham_TakeDamage"player","fwTakeDamage",0);
    
register_forward(FM_PlayerPreThink"fwPreThink"1);
    
register_forward(FM_PlayerPreThink"check"1);
    
register_event("CurWeapon","switchweapon","be","1=1","2!29")
    
register_forward(FM_UpdateClientData"UpdateClientData_Post"1
    
RegisterHam(Ham_Spawn,"player","fwh_spawned",1)
}

public 
fwTakeDamage(ididinflictoridattackerFloat:damagedamagebits){
    new 
zycie;
    
zycie get_user_health(id);
    if (
zycie-damage 1)
    {
    
gfFrost[id]=true;
    if (
cs_get_user_team(id) == CS_TEAM_T){
        
set_user_rendering(idkRenderFxGlowShell25500kRenderNormal30)
        }
        else if (
cs_get_user_team(id) == CS_TEAM_CT){
        
set_user_rendering(idkRenderFxGlowShell00255kRenderNormal30)
        }
    return 
HAM_SUPERCEDE;
    }
}

public 
fwh_spawned(id){
    if(!
is_user_alive(id)){
        return 
HAM_IGNORED;
    } 
    
gfFrost[id]=false;
    
set_user_rendering(idkRenderFxNone000kRenderNormal0)
    return 
HAM_IGNORED;
}

public 
fwPreThink(id){
    if(
gfFrost[id] == true){
    
set_pev(idpev_maxspeed1.0
    
set_pev(idpev_buttonpev(id,pev_button) & ~IN_ATTACK
    
set_pev(idpev_buttonpev(id,pev_button) & ~IN_ATTACK2
    }
}

public 
switchweapon(id)
{
    if(
gfFrost[id] == true){
        
engclient_cmd(id,"weapon_knife")
        
client_cmd(id,"weapon_knife")
    }
}

public 
UpdateClientData_Post(idsendweaponscd_handle

    if(
gfFrost[id] == true){
    if(!
is_user_alive(id)) 
        return 
FMRES_IGNORED 
     
    
if(get_user_weapon(id) != CSW_KNIFE
        return 
FMRES_IGNORED 
     
    set_cd
(cd_handleCD_ID0)        
     
    return 
FMRES_HANDLED
    
}
    else
    {
    return 
FMRES_IGNORED
    
}
}  

public 
checkid )
{

    if( !
gfFrost[id] )
    return 
PLUGIN_HANDLED;
    
    new 
num, list[32], Float:dist 250.0;
    
num find_sphere_classid"player"dist, list, 32 );
    
    new 
player;
    for ( new 
num i++ )
    {        
        
player = list[ ];
        if( !
is_user_aliveplayer ) || get_user_teamplayer ) != get_user_teamid ))
        {
            continue;
        }
        
odmroz(id);
    }
}

public 
odmroz(id)
{
    
gfFrost[id] = false;
    
set_user_health(id,100);
    
set_user_rendering(idkRenderFxNone000kRenderNormal0)
    
set_pev(idpev_maxspeed250.0

Yea, i find mistake in plugin:

if( !is_user_alive( player ) || get_user_team( player ) != get_user_team( id ) || id == player)

and working perfect

And now, how to make check when players are near freeze Player 5 seconds then unfreeze Player?

Maybe set_task 1 second check(id) and make variable and if this variable = 5 then odmroz(id) ?

Yea and i make this Working amazing, when i am go out or killed when i unfreezed player then player is still unfreezed :

PHP Code:
public fwPreThink(id){
    if (!
task_exists(id)){
    
set_task(1.0,"check",id);
    } 
And check:

PHP Code:
public checkid )
{

    if( !
gfFrost[id] )
    return 
PLUGIN_HANDLED;
    
    new 
num, list[32], Float:dist 250.0;
    
num find_sphere_classid"player"dist, list, 32 );
    
    new 
player;
    for ( new 
num i++ )
    {        
        
player = list[ ];
        if( !
is_user_aliveplayer ) || get_user_teamplayer ) != get_user_teamid ) || id == player)
        {
            continue;
        }
        
tuf[id]=tuf[id]+1;
        if (
tuf[id] == 5){
        
tuf[id]=0;
        
odmroz(id);
        }
    }


Last edited by Juri; 04-02-2011 at 14:56.
Juri is offline
grimvh2
Veteran Member
Join Date: Nov 2007
Location: Fishdot Nation
Old 04-02-2011 , 15:34   Re: Finding Players near Player
Reply With Quote #8

If you want some less task, you could check ham_touch, and after they touched check 7 seconds if he is still near him. So you don't need a task wich is always checking for close players.
__________________
I am out of order!
grimvh2 is offline
Juri
Junior Member
Join Date: Apr 2011
Old 04-02-2011 , 15:38   Re: Finding Players near Player
Reply With Quote #9

But ham_touch is "task" repeat 1 second ?
Juri is offline
Exolent[jNr]
Veteran Member
Join Date: Feb 2007
Location: Tennessee
Old 04-02-2011 , 16:52   Re: Finding Players near Player
Reply With Quote #10

Code:
#include <amxmodx> #include <engine> /* distance around player for teammates to be in */ #define TEAMMATE_RADIUS     100.0 /* how many teammates must be around the player */ #define TEAMMATE_COUNT      3 /* how long (in seconds) teammates must be around player to unfreeze */ #define UNFREEZE_TIME       7.0 public client_PreThink(id) {     static Float:start[33];         if( gfFrost[id] )     {         if( start[id] > 0.0 )         {             if( GetTeammateRadius(id, TEAMMATE_RADIUS) >= TEAMMATE_COUNT )             {                 if( (get_gametime() - start[id]) >= UNFREEZE_TIME )                 {                     /* unfreeze player */                     odmroz(id);                                         start[id] = 0.0;                 }             }             else             {                 start[id] = 0.0;             }         }         else if( GetTeammateRadius(id, TEAMMATE_RADIUS) >= TEAMMATE_COUNT )         {             start[id] = get_gametime();         }     }     else     {         start[id] = 0.0;     } } GetTeammateRadius(id, Float:radius) {     new players[32];     new pnum = find_sphere_class(id, "player", radius, players, 32);         new team = get_user_team(id);         for( new i = 0; i < pnum; i++ )     {         if( get_user_team(players[i]) != team )         {             players[i--] = players[--pnum];         }     }         return pnum; }
__________________
No private work or selling mods.
Quote:
Originally Posted by xPaw View Post
I love you exolent!
Exolent[jNr] 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 18:37.


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