Raised This Month: $51 Target: $400
 12% 

Ham_Item_PreFrame problème


  
 
 
Thread Tools Display Modes
Author Message
eXtrem
Member
Join Date: Jul 2011
Old 03-06-2012 , 15:35   Ham_Item_PreFrame problème
#1

Bien le bonjour,

Je tente de hooker Ham_Spawn, Ham_Killed, Ham_Item_PreFrame et Ham_TakeDamage sur les bots de CZ.

J'ai trouvé ce plugin de Connor qui créé un multiforward pour pouvoir utiliser RegisterHamFromEntity quand le premier bot est créé (il me semble).

J'ai donc tenté de faire fonctionner le code que voici, mais sans succès.

PHP Code:
#define GetTeam(%1)  get_pdata_int(%1,114)
#define SetTeam(%1,%2)  set_pdata_int(%1,114,%2)

const TASKID_REVIVE           =   1337;
const 
TASKID_COUNTDOWN        =   133789;

new 
g_iNumberSound33 ] , g_iSecondsCountDown33 ] , maClasse33 ];

enum 
{
    
CLASS_ONE,
    
CLASS_TWO,
    
CLASS_THREE
}

new const 
szNameClasses[ ][ ] = 
{
    
"Classe1",
    
"Classe2",
    
"Classe3"
}

new const 
Float:flHealthClasses[ ] = 
{
    
700.0,
    
600.0,
    
300.0
}

new const 
Float:flSpeedClasses[ ] = 
{
    
0.0 ,
    
280.0 ,
    
600.0
}

public 
plugin_init( )
{
    
RegisterHamHam_Spawn"player""fwSpawn");
    
RegisterHamHam_Killed"player""fwKilled" );
    
RegisterHamHam_Item_PreFrame"player""fwItemPreFrame");
    
RegisterHamHam_TakeDamage"player""fwTakeDamage" );
}

public 
client_putinserverid )
{
    
maClasseid ] = -1;
}

public 
cz_ham_bot_registerableid 
{
    
RegisterHamFromEntityHam_Spawnid"fwSpawn"true );
    
RegisterHamFromEntityHam_Item_PreFrameid"fwItemPreFrame"true );
    
RegisterHamFromEntityHam_TakeDamageid"fwTakeDamage" );
    
RegisterHamFromEntityHam_Killedid"fwKilled" );
    
    
maClasseid ] = -1;
}

public 
fwSpawnid 
{
    if( 
task_existsTASKID_REVIVE+id ) ) 
    {
        
remove_taskTASKID_REVIVE+id );
    }
    
    if( 
task_existsTASKID_COUNTDOWN+id ) ) 
    {
        
remove_taskTASKID_COUNTDOWN+id );
    }

    if( 
is_user_aliveid ) ) 
    {
        if( 
GetTeamid ) == 
        {
            
maClasseid ] = random_num0charsmaxszNameClasses ) );
            
set_pevidpev_healthflHealthClassesmaClasseid ] ] );
            
set_pevidpev_maxspeedflSpeedClassesmaClasseid ] ] );
            
            if( !
is_user_botid ) ) 
            {
                
client_printidprint_center"Tu es un %s"szNameClassesmaClasseid ] ] );
            }
        }
        
        else 
        {
            
g_iZombieClassid ] = -1;
        }
    }
}

public 
fwKilledvictim 
{    
    new 
timeTask;
    
    if( 
GetTeamvictim ) == 
    {
        new 
szSound32 ];
        
        switch( 
maClassevictim ] ) 
        {
            case 
CLASS_ONEcopyszSoundcharsmaxszSound ), szSoundClassOne );
            case 
CLASS_TWOcopyszSoundcharsmaxszSound ), szSoundClassTwo );
            case 
CLASS_THREEcopyszSoundcharsmaxszSound ), szSoundClassThree );
        }
        
        
emit_soundvictimCHAN_AUTOszSound1.0ATTN_NONE0PITCH_NORM );
        
        
timeTask 2;
    }
    
    else 
    {
        
timeTask 35;
    }

    
g_iSecondsCountDownvictim ] = timeTask;
    
    
set_task1.0"CountDown"victim+TASKID_COUNTDOWN__"a"timeTask );
    
set_taskfloattimeTask ), "Revive"victim+TASKID_REVIVE );
}

public 
Reviveplayer 
{
    
player -= TASKID_REVIVE;
    
    if( !
is_user_aliveplayer ) ) 
    {
        
ExecuteHamBHam_CS_RoundRespawnplayer );
    }
}
        
public 
CountDownplayer 
{
    
player -= TASKID_COUNTDOWN;
    
    
set_hudmessage255255255, -1.00.206.00.9__, -);
    
show_hudmessageplayer"Tu respawn dans %d secondes", --g_iSecondsCountDownplayer ] );
}

public 
fwItemPreFrameid 
{
    if( 
is_user_aliveid ) && GetTeamid ) == && maClasseid ] > && pevidpev_maxspeed ) != -1.0 
    {
        
set_pevidpev_maxspeedflSpeedClassesmaClasseid ] ] );
    }
}

public 
fwTakeDamagevictim inflictor attacker Float:damage damagebits )
{
    if( 
is_user_aliveattacker ) && GetTeamattacker ) == 
    {
        if( 
attacker != victim 
        {
            new 
szSound32 ];
            
            switch( 
maClasseattacker ] ) 
            {
                case 
CLASS_ONE
                {
                    if( !
g_iNumberSoundattacker ] ) 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassOneShot );
                        
g_iNumberSoundattacker ] = 1;
                    }
                    
                    else 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassOneShot2 );
                        
g_iNumberSoundattacker ] = 0;
                    }
                }
                case 
CLASS_TWO
                {
                    if( !
g_iNumberSoundattacker ] ) 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassTwoShot );
                        
g_iNumberSoundattacker ] = 1;
                    }
                    
                    else 
                    {
                        
copyszSoundcharsmaxszSound ), szSoundClassTwoShot2 );
                        
g_iNumberSoundattacker ] = 0;
                    }
                }
                case 
CLASS_THREE
                {
                    
copyszSoundcharsmaxszSound ), szSoundClassThreeShot );
                }
            }
            
            
emit_soundattackerCHAN_AUTOszSound1.0ATTN_NONE0PITCH_NORM );
        }
    }
}

public 
eventRoundRestart( ) 

    
TaskRemove( );
}

public 
eventRoundEnd( ) 
{
    
TaskRemove( );
}

TaskRemove( ) 
{
    new 
iPlayers32 ], iNumid;
    
get_playersiPlayersiNum"h" );
    
    for( new 
0iNumi++ ) 
    {
        
id iPlayers];
        if( 
task_existsTASKID_REVIVE+id ) ) 
        {
            
remove_taskTASKID_REVIVE+id );
        }
        
        if( 
task_existsTASKID_COUNTDOWN+id ) ) 
        {
            
remove_taskTASKID_COUNTDOWN+id );
        }
    }

Je vous ai mis quasiment tout le code, mais c'est juste pour que vous ayez les principales informations, mais mon problème concerne particulièrement Ham_Item_PreFrame.

Quand j'ajoute deux bots en terroristes (donc ils seront automatiquement proches l'un de l'autre), le serveur plante, sans erreur logs, ni erreur console.

Le crash se produit au contact de deux terroristes. D'ailleurs, les terroristes sont dans un bug, invisible pour les autres, et parfois bloqués.

Lorsque j'enlève le code avec Item_PreFrame, le bug n'y ai plus.

J'ai pourtant fait tous les checks nécessaires pour éviter les index hors des limites.

Je ne vois vraiment pas d'où vient le problème, quelqu'un pourrait m'éclaircir s'il vous plaît ?

D'avance merci.

Last edited by eXtrem; 03-06-2012 at 15:42.
eXtrem is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-07-2012 , 02:07   Re: Ham_Item_PreFrame problème
#2

C'est quoi 0.0 pour la classe 1 ???
Mets plutôt 1.0 pour bloquer les joueurs, mais bon c'est peut etre pour les autres vitesses, les bots font une erreur de calcul ou autre je sais pas.

Essaye, on sait jamais, à la place de set_pev(id, pev_maxspeed, blablabla) :

engfunc(EngFunc_SetClientMaxSpeed, id, blablabla)
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
eXtrem
Member
Join Date: Jul 2011
Old 03-07-2012 , 08:16   Re: Ham_Item_PreFrame problème
#3

0.0 pour la classe 1, c'est juste un nombre pour dire que la vitesse n'est pas modifié.

Dans mon énumération, la classe 1 équivaut à 0 donc maClasse[ index ] = 0.
Dans Ham_Item_PreFrame, je vérifie que maClasse[ index ] > 0 donc de ce côté là c'est bon.

Le problème étant qu'avec les joueurs normaux ça ne plante pas donc le problème vient à coup sûr des bots, et donc des hook Ham dans cz_ham_bot_registerable.

J'ai exactement le même problème avec engfunc.

Je vais essayer de faire du debug via des logs dans Ham_Item_PreFrame, au cas où.

EDIT : J'ajoute que le crash se produit ~2 secondes après avoir ajouté un bot en terroriste, et apparemment, même plus lorsqu'il rentre en colision avec un autre joueur.

EDIT2 : Je viens de commenter les 4 RegisterHamFromEntity et le bug est toujours là, le bot est invisible et quand je le touche (je vois sa position via le radar), le serveur plante.
Des fois, pas toujours, il y a un "bug spawn". C'est à dire que l'on est spawn à un endroit de la map (par exemple zone anti) et on est bloqué. Ça se produit surtout lorsqu'on change de team d'anti à terroriste surtout.


Veuillez m'excuser pour les mauvaises informations fournies au début.

Last edited by eXtrem; 03-07-2012 at 08:47.
eXtrem is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 03-07-2012 , 13:18   Re: Ham_Item_PreFrame problème
#4

Le bug n'est pas avec ces hooks, ça c'était déjà sûr, et si de + en commenant ça bug toujours, c'est ton code qui est foireux.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
eXtrem
Member
Join Date: Jul 2011
Old 03-07-2012 , 13:41   Re: Ham_Item_PreFrame problème
#5

Dans mon code, j'ai inclus une partie de ton plugin Players Models, que j'ai bidouillé pour définir un skin différent à chaque classe. Comme dans ton code, je check avec IsUserConnected mais je viens de remarquer que même lorsque c'est un bot, j'utilise SetUserConnected, ce qui fait que SetClientKeyValue s'effectue même sur les bots. J'ai ajouter !is_user_bot et les bugs se produisent maintenant que lorsqu'on change de team (CT -> T).
eXtrem is offline
 



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 13:09.


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