AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Help with while (https://forums.alliedmods.net/showthread.php?t=163556)

Kiske 07-31-2011 15:18

Help with while
 
Hi.
I have a question.

Code:
PHP Code:

#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(id))

register_forward(FM_Think"fw_Think")

public 
fw_think(entity)
{
    static 
classname[32], model[64]
    
pev(entitypev_classnameclassnamecharsmax(classname))
    
    if(
equal(classname"bad_zone"))
    {
        new 
= -1
        
new Float:ent_origin[3]

        
pev(entitypev_originent_origin)
        
        while((
find_ent_in_sphere(eent_origin200.0)) != 0)
        {
            
pev(epev_modelmodelcharsmax(model))
            if(
equal(model"models/balls/w_ball3.mdl")) break;
            if(!
is_user_valid_alive(e)) continue;
            
            
// ...
        
}
        
        
set_pev(entitypev_nextthinkget_gametime() + 0.1)
    }


Why the while works for the players when the entity that the model has it's inside the radio ?

Thanks in advanced.

Exolent[jNr] 07-31-2011 15:38

Re: Help with while
 
Because player indexes are before entity indexes.

You have to check if that entity is near before checking for players, meaning 2 different loops.

Javivi 07-31-2011 15:38

Re: Help with while
 
Thats because players are entities too, you can solve that by checking that your ent is not a player.
!( 1 <= ent <= 32 )

Kiske 07-31-2011 15:46

Re: Help with while
 
Quote:

Originally Posted by Exolent[jNr] (Post 1522805)
Because player indexes are before entity indexes.

You have to check if that entity is near before checking for players, meaning 2 different loops.

Thanks.

Quote:

Originally Posted by Javivi (Post 1522806)
Thats because players are entities too, you can solve that by checking that your ent is not a player.
!( 1 <= ent <= 32 )

PHP Code:

#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(id))

if(!is_user_valid_alive(e)) continue; 


Kiske 07-31-2011 18:20

Re: Help with while
 
Quote:

Originally Posted by Exolent[jNr] (Post 1522805)
Because player indexes are before entity indexes.

You have to check if that entity is near before checking for players, meaning 2 different loops.

I will try.
Can you explain me please? I can't make it.

Thanks in advanced.

Hunter-Digital 07-31-2011 18:25

Re: Help with while
 
Code:

new Float:ent_origin[3]

pev(entity, pev_origin, ent_origin)

new maxplayers = get_maxplayers()
new e = maxplayers // start after player entities

while((e = find_ent_in_sphere(e, ent_origin, 200.0)) != 0)
{
    // entities loop
}

e = 1 // reset and start before player entities

while((e = find_ent_in_sphere(e, ent_origin, 200.0)) <= maxplayers)
{
    // players loop
}


Kiske 07-31-2011 21:57

Re: Help with while
 
Quote:

Originally Posted by Hunter-Digital (Post 1522944)
Code:

new Float:ent_origin[3]

pev(entity, pev_origin, ent_origin)

new maxplayers = get_maxplayers()
new e = maxplayers // start after player entities

while((e = find_ent_in_sphere(e, ent_origin, 200.0)) != 0)
{
    // entities loop
}

e = 1 // reset and start before player entities

while((e = find_ent_in_sphere(e, ent_origin, 200.0)) <= maxplayers)
{
    // players loop
}


I can't make it :(

PHP Code:

        new Float:ent_origin[3]
        
pev(entitypev_originent_origin)
        
        new 
maxplayers
        
while((find_ent_in_sphere(eent_origin200.0)) != 0)
        {
            
pev(epev_modelmodelcharsmax(model))
            if(!
equal(model"models/balls/w_ball3.mdl"))
                return;
        }
        
        
1
        
while((find_ent_in_sphere(eent_origin200.0)) <= maxplayers)
        {
            if(!
is_user_valid(e) || !is_user_alive(e)) continue;
            
            
// ....
        
}
        
        
set_pev(entitypev_nextthinkget_gametime() + 0.1


Hunter-Digital 08-01-2011 04:07

Re: Help with while
 
More details ? I can't know what you're trying to do if you don't post the entire code or explain in detail what exacly you can't do.

It's also possible I got the logics wrong, try debugging by printing client or server messages in those loops.

Exolent[jNr] 08-01-2011 10:05

Re: Help with while
 
PHP Code:

#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(id))

register_forward(FM_Think"fw_Think")

public 
fw_think(entity)
{
    static 
classname[32], model[64]
    
pev(entitypev_classnameclassnamecharsmax(classname))
    
    if(
equal(classname"bad_zone"))
    {
        new 
Float:ent_origin[3]

        
pev(entitypev_originent_origin)
        
        new 
found false
        
new maxplayers
        
        
while((find_ent_in_sphere(eent_origin200.0)) != 0)
        {
            
pev(epev_modelmodelcharsmax(model))
            if(
equal(model"models/balls/w_ball3.mdl"))
            {
                
found true
                
break;
            }
        }
        
        if(!
found)
        {
            
0
            
while((find_ent_in_sphere(eent_origin200.0)) <= maxplayers)
            {
                if(!
is_user_alive(e)) continue;
                
                
// ...
            
}
        }
        
        
set_pev(entitypev_nextthinkget_gametime() + 0.1)
    }



Kiske 08-01-2011 16:21

Re: Help with while
 
Quote:

Originally Posted by Exolent[jNr] (Post 1523384)
PHP Code:

#define is_user_valid_alive(%1) (1 <= %1 <= g_maxplayers && is_user_alive(id))

register_forward(FM_Think"fw_Think")

public 
fw_think(entity)
{
    static 
classname[32], model[64]
    
pev(entitypev_classnameclassnamecharsmax(classname))
    
    if(
equal(classname"bad_zone"))
    {
        new 
Float:ent_origin[3]

        
pev(entitypev_originent_origin)
        
        new 
found false
        
new maxplayers
        
        
while((find_ent_in_sphere(eent_origin200.0)) != 0)
        {
            
pev(epev_modelmodelcharsmax(model))
            if(
equal(model"models/balls/w_ball3.mdl"))
            {
                
found true
                
break;
            }
        }
        
        if(!
found)
        {
            
0
            
while((find_ent_in_sphere(eent_origin200.0)) <= maxplayers)
            {
                if(!
is_user_alive(e)) continue;
                
                
// ...
            
}
        }
        
        
set_pev(entitypev_nextthinkget_gametime() + 0.1)
    }



Thanks! It's working :)


All times are GMT -4. The time now is 03:24.

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